iteye_13460 2010-03-27 10:20
浏览 187
已采纳

有两个小问题哈。

第一,关于函数为List时的情况,为什么在函数内List的size不为0,而在调用函数里,则为0呢?
不太明白List参数传递时的问题。。。

package com;

import java.util.ArrayList;
import java.util.List;

import org.hibernate.Session;

public class TestMain {

/**
 * main()
 * 2010-3-25,下午10:00:10
 */
public static void main(String[] args) {
    // TODO Auto-generated method stub
    List list = new ArrayList();
    test(list);
    System.out.println(list.size());

}
public static void test(List list){
    Session session = HibernateSessionFactory.getSession();
    session.beginTransaction();
    list = session.createSQLQuery(" select id,name from body " ).list();
    System.out.println("==="+list.size());
    session.close();
}

}

第二,JDK源文件中AbstractMap 的方法 public Set keySet(),没太明白代码结构。。。。。
public Set keySet() {
if (keySet == null) {
keySet = new AbstractSet() {
public Iterator iterator() {
return new Iterator() {
private Iterator> i = entrySet().iterator();

        public boolean hasNext() {
            return i.hasNext();
        }

        public K next() {
            return i.next().getKey();
        }

        public void remove() {
            i.remove();
        }
                };
    }

    public int size() {
        return AbstractMap.this.size();
    }

    public boolean contains(Object k) {
        return AbstractMap.this.containsKey(k);
    }
    };
}

谢谢。

  • 写回答

6条回答 默认 最新

  • qwe_rt 2010-03-27 12:20
    关注

    [code="java"]public static void test(List list){
    Session session = HibernateSessionFactory.getSession();
    session.beginTransaction();
    list = session.createSQLQuery(" select id,name from body " ).list();
    System.out.println("==="+list.size());
    session.close();
    } [/code]
    看看这个方法,根据上面文章讲解的。
    [color=red][size=medium]我们知道,方法永远传值(这种值有两种:一种是基本类型,一种是引用【或称地址】);[/size][/color]

    跟着我来分析一下:
    1,你传list引用给这个test方法,也就是把这个引用复制一份([color=blue][size=medium]于是有两份引用[/size][/color])给test这个函数的"[color=red]参数list[/color]"(这个是[color=red]参数list[/color]哦,跟前面list不同的)。

    2,“list=..."是不是修改"[color=red]参数list[/color]"这个引用的值???是的。没错的,但是你发现了,它只修改"[color=red]参数list[/color]"这一份引用,没有修改另一份引用哦。所以原来的那一份list引用没有改变。

    应该清楚了吧。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(5条)

报告相同问题?

悬赏问题

  • ¥60 更换迈创SOL6M4AE卡的时候,驱动要重新装才能使用,怎么解决?
  • ¥15 让node服务器有自动加载文件的功能
  • ¥15 jmeter脚本回放有的是对的有的是错的
  • ¥15 r语言蛋白组学相关问题
  • ¥15 Python时间序列如何拟合疏系数模型
  • ¥15 求学软件的前人们指明方向🥺
  • ¥50 如何增强飞上天的树莓派的热点信号强度,以使得笔记本可以在地面实现远程桌面连接
  • ¥20 双层网络上信息-疾病传播
  • ¥50 paddlepaddle pinn
  • ¥20 idea运行测试代码报错问题