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条)

报告相同问题?

悬赏问题

  • ¥15 关于#Java#的问题,如何解决?
  • ¥15 加热介质是液体,换热器壳侧导热系数和总的导热系数怎么算
  • ¥15 想问一下树莓派接上显示屏后出现如图所示画面,是什么问题导致的
  • ¥100 嵌入式系统基于PIC16F882和热敏电阻的数字温度计
  • ¥15 cmd cl 0x000007b
  • ¥20 BAPI_PR_CHANGE how to add account assignment information for service line
  • ¥500 火焰左右视图、视差(基于双目相机)
  • ¥100 set_link_state
  • ¥15 虚幻5 UE美术毛发渲染
  • ¥15 CVRP 图论 物流运输优化