`
elite20130514
  • 浏览: 48197 次
  • 性别: 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
分享到:
评论

相关推荐

    C#for循环详细实例

    本篇文章将深入探讨C#中的for循环,包括其语法、工作原理以及各种实际应用实例。 ### for循环的语法 C#的for循环由四个部分组成,用分号分隔: 1. 初始化:定义一个或多个变量并初始化它们。 2. 条件检查:检查一个...

    js for循环输出

    在压缩包中的"for循环输出"文件可能包含了更多关于`for`循环的实例和练习,例如嵌套循环、条件判断结合的循环等。通过这些案例,你可以进一步理解`for`循环的工作原理,并掌握在不同场景下的应用。 总的来说,`for`...

    Java for循环性能优化实现解析

    Java for循环性能优化实现解析 Java for循环性能优化实现解析是 Java 编程中非常重要的一部分,主要讨论了Java for循环性能优化的实现解析。下面是从文件中提炼出的相关知识点: 1. 嵌套循环优化 在Java中,嵌套...

    for循环练习--示例

    在编程领域,for循环是一种非常基础且重要的控制流结构,广泛应用于各种编程语言,包括C、C++、Java、Python等..."for循环练习--示例"这个资源提供了一个很好的平台,帮助学习者从实践中学习和巩固for循环的相关知识。

    cmd命令和批处理的for循环说明

    for循环命令是批处理中的一种常用命令,用于遍历文件、目录或其他对象,并执行指定的命令。for循环命令的基本语法如下: FOR %variable IN (set) DO command 其中,%variable 是一个变量,set 是一个文件、目录或...

    新杨辉三角程序,for...next,循环的应用实例(VB6.0源代码编写)

    新杨辉三角程序是计算机编程领域中一个经典的算法示例,它主要展示了如何利用循环结构,如`For...Next`循环,在VB6.0(Visual Basic 6.0)环境中生成数学上的杨辉三角形。杨辉三角形,又称为帕斯卡三角,是一个二维...

    JavaScript中的for循环.pdf

    在网页制作和网站开发中,for循环常用于处理数组或对象集合,例如遍历DOM元素。例如,通过for循环一次性设置多个div元素的背景颜色,而不是手动编写多行相同代码。 总的来说,JavaScript的for循环是一种强大且灵活...

    利用原生循环依赖关系序列化复杂JavaScript对象或ES6类

    在处理包含循环依赖关系的对象时,即一个对象引用了另一个对象,而后者又反过来引用了前者,序列化会变得特别具有挑战性。在JavaScript中,原生的JSON.stringify()方法无法处理这种情况,因为它会陷入无限循环中。本...

    python 用for循环实现1~n求和的实例

    ### Python使用For循环实现1~n求和的实例解析 #### 核心知识点:Python For循环及求和应用 在Python编程中,`for`循环是一种常用的迭代结构,用于重复执行一段代码直到满足某个条件为止。本文将详细介绍如何利用...

    基于对象编程实例

    这体现了类的实例化和方法调用,是OOP的基本操作。 `BlackJackGame`类包含多个变量声明,如赌注(bet)、金钱(money)、一副牌(deck)、玩家的手(playersHand)和庄家的手(dealersHand)。这些都是游戏的重要...

    c# 循环生成XML方法

    例如,在给定的代码片段中,首先实例化了一个`XmlDocument`对象: ```csharp XmlDocument xmldoc = new XmlDocument(); ``` 接下来,创建XML声明,这是一个包含XML版本和编码方式的特殊节点。在本例中,使用的编码...

    php for 循环使用的简单实例

    下面是一个简单的 `for` 循环实例,它将打印数字1到5: ```php for ($i = 1; $i ; $i++) { echo "The number is " . $i . " "; } ?&gt; ``` 在这个例子中,`$i` 初始化为1,然后每次循环结束后 `$i` 自增1。只要...

    js for循环倒序输出数组元素的实例

    在本实例中,for循环的初始化表达式是`var i = a.length - 1;`,设置循环变量`i`为数组长度减一,也就是数组最后一个元素的索引。条件表达式是`i &gt;= 0;`,意味着只要`i`的值不小于0,循环就会继续。迭代表达式是`i--...

    vue的for循环使用方法

    在Vue中,`v-for`指令是用于数据循环渲染的关键元素,它允许开发者轻松地将数组或对象的每一个项渲染成视图中的多个元素。以下是对Vue中`v-for`循环使用的详细介绍: 1. **基本语法**: `v-for`指令的基本语法是`v...

    Android之循环队列操作

    本文将详细探讨Android中如何实现循环队列,并通过`QueueDemo`实例来展示其工作原理。 首先,我们需要了解循环队列的基本概念。与普通队列不同,循环队列在空间上形成一个环形结构,当队尾达到数组边界时,可以重新...

    浅析Python中的for 循环

    下面我们将深入探讨Python `for`循环的工作原理、语法和相关实例。 1. `for`循环基本语法: Python的`for`循环语法简洁明了,如下所示: ```python for iterating_var in sequence: statements(s) ``` 这里的`...

    JavaScript对象反射用法实例

    例如,创建一个对象实例后,可以使用Reflect.get和Reflect.set来动态读取和设置属性,使用Reflect.has来检查属性是否存在,使用Reflect.ownKeys来获取对象所有属性键的列表等。 此外,反射机制也常用于框架和库的...

    PHP循环控制语句:while\for\

    ### for循环 `for`循环在PHP中用于已知循环次数的情况,它通常比`while`循环更简洁。其基本语法如下: ```php for (initialization; condition; increment/decrement) { // 当条件为真时执行的代码块 } ``` `...

    java中用数组为一个类定义多个对象

    2. **实例化数组**:接着,我们需要为数组中的每个位置创建一个新的`Person`对象。这通常在循环中完成,如下所示: ```java for (int i = 0; i ; i++) { people[i] = new Person("Person" + (i + 1), 30 + i); } `...

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

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

Global site tag (gtag.js) - Google Analytics