java基础问题
1.TUser user = new TUser();
user = list.get(0);
user = list.get(1);
这个user创建了几个对象
2.TUser user = list.get(0);
user = list.get(1);
这个user又创建了几个对象?如何证明?
对不起各位,没有表达清楚
即
TUser user = list.get(0);
是否等价于
TUser user = new TUser();
user = list.get(0); 展开
按照我的理解,1、中user = new TUser();在堆中开辟了一个TUser对象的空间,而如果按照你所说list里面放了多个TUser的话list.get(0),list.get(1)获得的TUser对象应当是已经存在在堆中的。而user只是一个存在于栈的变量,分别被你指向了你在堆中新建的new TUser() 、 list.get(0) 、list.get(1)。2、中也跟1同理
对不起,我说的不够清楚,简单点
TUser user = list.get(0);
这段代码中,是栈中的user指向了堆中的list.get(0)呢,还是user先在堆中new出一个空间,然后把list.get(0)中的值放到了new出的空间中。
即
TUser user = list.get(0);
是否等价于
TUser user = new TUser();
user = list.get(0);
并不是user先在堆中new出一个空间,而是user直接指向了堆中的list.get(0)。
哥,你想说明啥? 你用list(前提list<user>)里面有值,用get方法肯定得到不一样的对象啊。要说几个对象,都是2个。
测试代码:
List<Cat> list = new ArrayList<Cat>();
list.add(new Cat(1,"1"));
list.add(new Cat(2,"2"));
Cat user = new Cat();
user = list.get(0);
System.out.println(user.toString()+" "+user.hashCode());;
user = list.get(1);
System.out.println(user.toString()+" "+user.hashCode());;
// 这个user创建了几个对象
Cat user1 = list.get(0);
System.out.println(user1.toString()+" "+user1.hashCode());;
user1 = list.get(1);
System.out.println(user1.toString()+" "+user1.hashCode());;
TUser user = list.get(0); 是要强转的吧 TUser user =(TUser ) list.get(0);
你好,是泛型,不需要强制转换,问题与这无关,谢谢!