对象实例化位置for循环相关

在网上看到过这样一段话,觉得挺有道理?不过实践出真知啊,咋就不能理解这些话了。。

这种情况在我们的实际应用中经常遇到,而且我们很容易犯类似的错误,例如下面的代码:

  Java代码

  for (int i = 0; i < 10000; ++i) {

  Object obj = new Object();

  System.out.println("obj= " + obj);

  }

  上面的做法会浪费较大的内存空间。正确的做法如下所示:

  Java代码

  Object obj = null;

  for (int i = 0; i < 10000; ++i) {

  obj = new Object();

  System.out.println("obj= "+ obj);

  }

  采用上面的第二种编写方式,仅在内存中保存一份对该对象的引用,而不像上面的第一种编写方式中代码会在内存中产生大量的对象引用,浪费大量的内存空间,而且增大了垃圾回收的负荷。因此在循环体中声明创建对象的编写方式应该尽量避免。

 

看我的测试代码(挺简单的):

public static void main(String[] args) {
		List list = new ArrayList();
		for(int i=0;i<2;i++) {
			Object obj = new Object();
			list.add(obj);
		}
		System.out.println(list.get(0)+" "+list.get(1));
		Object obj2 = null;
		List list2 = new ArrayList();
		for(int i = 0;i<2;i++) {
			obj2 = new Object();
			list2.add(obj2);
		}
		System.out.println(list2.get(0)+" "+list2.get(1));
	}

 结果:

 

java.lang.Object@de6ced java.lang.Object@c17164
java.lang.Object@1fb8ee3 java.lang.Object@61de33

 结果两者的hashcode都是不同的,呜呜呜,怎么办?不是说同一份引用吗?我晕了~

 

 

回复:我理解错了,不是同一份引用,是仅一份引用,现在明了了,哈哈



 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值