`
elite20130514
  • 浏览: 45211 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

对象实例化位置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都是不同的,呜呜呜,怎么办?不是说同一份引用吗?我晕了~

 

 

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



 

  • 大小: 14.5 KB
分享到:
评论

相关推荐

    Java经典编程源码基础例程300.zip

    实例025 使用for循环输出杨辉三角形 34 实例026 使用嵌套循环在控制台上 输出九九乘法表 35 实例027 使用while循环计算1+ 1/2!+1/3!…1/20! 36 实例028 使用for循环输出空心的菱形 38 实例029 终止循环体 39 实例...

    JavaScript基础和实例代码

    4.5.3 修改、删除对象实例的属性 4.5.4 通过原型为对象添加新属性和新方法 4.5.5 自定义对象的嵌套 4.5.6 内存的分配和释放 4.6 本章小结 第5章 文档对象模型(DOM) 5.1 DOM概述 5.1.1 基本对象模型 5.1.2 Netscape ...

    源文件程序天下JAVASCRIPT实例自学手册

    4.5.3 修改、删除对象实例的属性 4.5.4 通过原型为对象添加新属性和新方法 4.5.5 自定义对象的嵌套 4.5.6 内存的分配和释放 4.6 本章小结 第5章 文档对象模型(DOM) 5.1 DOM概述 5.1.1 基本对象模型 5.1.2 Netscape ...

    基于Java实现学生选课模拟系统之文件输入输出【100011979】

    要进行选课操作,我需要从文件中取出我们上边存入的对象,将读取好的放入一个新的列表中,通过 for 循环历遍整个列表,将获取的内容,Course 类实例化的新对象 course,最后,输出打印选课情况。 关键代码

    java范例开发大全

    实例154 使用静态成员变量计算内存中实例化的对象数目 239 实例155 实现加减乘除的方法 240 8.3 面向对象的设计模式 241 实例156 Singleton单例模式 242 实例157 招聘(简单工厂模式) 243 实例158 同学聚会(工厂...

    开发一个小型的 MATLAB GUI,使其能够通过串口收到目标板上的数据并且可视化显示

    首先需要初始化串口, serial 是一个类,第一行代码也就是相当于实例化了。 set 和 get 的用法跟在 C# 里面的十分类似,get 是得到属性列表及其值,set 是设置属性,当然,对于公共属性,使用点运算符也是可以的。 ...

    Java开发实战1200例(第1卷).(清华出版.李钟尉.陈丹丹).part3

    实例034 使用for循环输出杨辉三角 43 实例035 使用嵌套循环在控制台上输出 九九乘法表 44 实例036 用while循环计算1+1/2!+1/3!…1/20! 45 实例037 for循环输出空心的菱形 46 实例038 foreach循环优于for循环 47 实例...

    Java范例开发大全 (源程序)

     实例154 使用静态成员变量计算内存中实例化的对象数目 239  实例155 实现加减乘除的方法 240  8.3 面向对象的设计模式 241  实例156 Singleton单例模式 242  实例157 招聘(简单工厂模式) 243  实例158...

    java范例开发大全(pdf&源码)

    实例154 使用静态成员变量计算内存中实例化的对象数目 239 实例155 实现加减乘除的方法 240 8.3 面向对象的设计模式 241 实例156 Singleton单例模式 242 实例157 招聘(简单工厂模式) 243 实例158 同学聚会(工厂...

    java范例开发大全源代码

     实例154 使用静态成员变量计算内存中实例化的对象数目 239  实例155 实现加减乘除的方法 240  8.3 面向对象的设计模式 241  实例156 Singleton单例模式 242  实例157 招聘(简单工厂模式) 243  ...

    可爱战机.fal

    //对象实例化 Life_MC= new life(); //设置记分器对象的位置 Life_MC.x = 250; Life_MC.y = stage.stageHeight - 25; //将记分器放置到舞台 stage.addChild( Life_MC); } //在舞台上放置...

    JAVA代码实现的纸牌

    JAVA代码实现的面向对象的实例,很好的完整的实例.3个类,很好的描述了一副纸牌的实例化.使用了JAVA的二维数组,FOR循环等知识点.

    Java范例开发大全(全书源程序)

    实例154 使用静态成员变量计算内存中实例化的对象数目 239 实例155 实现加减乘除的方法 240 8.3 面向对象的设计模式 241 实例156 Singleton单例模式 242 实例157 招聘(简单工厂模式) 243 实例158 同学聚会...

    visual C# 面形图绘制实例

    创建Graphics对象,实例化一个Bitmap对象,实例化Graphics对象,声明一个用于绘制颜色的数组,声明一个计算走势峰值的数组,记录绘制四边形的第一个点,记录绘制四边形的第二个点,通过for循环绘制月份和面形图,...

Global site tag (gtag.js) - Google Analytics