Integer是不可变类,进入一个方法后,在里面的值的改变不会影响方法外的引用
2014-11-05 08:11
197 查看
先看一个小程序
主函数的输出并没有像想像中一样会输出3,而是输出初始化的数值0
这是因为与String类似,所有的包装类都是final类,即不可变类。虽然在代码A处看起来是改变了counter的值,但实际上是创建了另一个对象,并将方法内的counter参数的引用指向了这个新创建的对象,由于是不同的引用,所以不会对方法外的引用有任何的影响。内存图如下所示:
在刚进入方法的时候:
执行counter = counter +1之后,由于Integer是不可变类,要改变它的值,其实是创建了一个新的对象,所以内存图如下:
主函数的输出并没有像想像中一样会输出3,而是输出初始化的数值0
这是因为与String类似,所有的包装类都是final类,即不可变类。虽然在代码A处看起来是改变了counter的值,但实际上是创建了另一个对象,并将方法内的counter参数的引用指向了这个新创建的对象,由于是不同的引用,所以不会对方法外的引用有任何的影响。内存图如下所示:
在刚进入方法的时候:
执行counter = counter +1之后,由于Integer是不可变类,要改变它的值,其实是创建了一个新的对象,所以内存图如下:
相关文章推荐
- 当一个对象实例作为一个参数被传递到方法中时,参数的值就是对该对象的引用。对象的内容可以在被调用的方法中改变,但对象的引用是永远不会改变的.
- Android中进入下一个Activity时在上一个Activity主动调用onDestroy()方法不会真正将上一个Activity从栈中删除
- 字符串与正则表达式1、字符串 String类对象是不可改变的,对于String对象的重新赋值在本质上是重新创建了一个String对象并将新值赋予该对象,其方法ToString对性能的提高并非很显著。
- jsp页面引用实体类+一个servlet里面增删改查4个方法。公用一个servlet。
- java面试题:当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递?
- 当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递?
- js赋值改变后原来的东西也改变了,影响了好几个其它使用同一个源数据的原因以及解决方法
- java面试题解惑:当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递?
- 当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递?
- 当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递?
- 两个Integer的引用对象传给一个swap方法在方法内部交换引用
- Java - 当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递?
- 当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递?
- 一个界面里面有多个UITextField时,点击每个UITextField都会进入textFieldShouldBeginEditing delegate方法
- 当一个对象被当做参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递?
- Android中进入下一个Activity时在上一个Activity主动调用onDestroy()方法不会真正将上一个Activity从栈中删除
- Android中进入下一个Activity时在上一个Activity主动调用onDestroy()方法不会真正将上一个Activity从栈中删除
- 点击这些按钮时进入到同一个action中找到相应的方法
- open 打开指定大小的窗口 并且不可改变大小的方法
- silverlight项目引用webservice的发布问题的一个解决方法