通过参考 Java。整数 ins 没有被修改,Collection 被修改,为啥? [复制]
Posted
技术标签:
【中文标题】通过参考 Java。整数 ins 没有被修改,Collection 被修改,为啥? [复制]【英文标题】:Pass by Ref Java. Integer ins't modified, Collection is modified, Why? [duplicate]通过参考 Java。整数 ins 没有被修改,Collection 被修改,为什么? [复制] 【发布时间】:2013-02-13 03:33:48 【问题描述】:我有两个不明白的例子
Java 将值作为变量传递或通过引用传递
为什么在Ref
类中整数变量没有改变(null)
?
为什么RefCol
类中的集合变量被修改col(1)
?
类参考:
test(): entero: 5
inicio(): entero: null
类 RefCol:
test(): col: [1]
inicio(): col: [1]
.
import java.util.Collection;
import java.util.Vector;
public class Ref
public static void main(String[] args)
Ref ref = new Ref();
ref.inicio();
public void inicio()
Integer entero = null;
test(entero);
System.out.println("inicio(): entero: " + entero);
public void test(Integer entero)
entero = new Integer(5);
System.out.println("test(): entero: " + entero);
public class RefCol
public static void main(String[] args)
RefCol ref = new RefCol();
ref.inicio();
public void inicio()
Collection col = new Vector();
test(col);
System.out.println("inicio(): col: " + col);
public void test(Collection col)
col.add( new Integer(1) );
System.out.println("test(): col: " + col);
【问题讨论】:
***.com/questions/2208943/… 不重复。我比较整数与集合... ¬¬ 引用的问题包含您问题的答案。无论您使用哪种类型的对象,概念都保持不变 【参考方案1】:您正在将 REFERENCE 的副本传递给对象实例。
如果直接更改对象。例如col.add
会改变底层对象。
如果您更改它所引用的对象。例如。 new Integer()
只会改变局部变量的引用。
【讨论】:
【参考方案2】:不是一回事。
entero = new Integer(5);
更改引用entero
,同时
col.add(new Integer(1));
更改引用的对象col
。
【讨论】:
【参考方案3】:简而言之:原始类型和“原始包装器(Integer、Long、Short、Double、Float、Character、Byte、Boolean)”不能通过引用进行更改。
查看http://en.wikipedia.org/wiki/Immutable_object了解详情
【讨论】:
这是我最喜欢的答案:D 是我需要知道的。谢谢!! 原始类型和“原始包装器”...通常所有类都是最终的吗?我正在尝试使用 StringBuffer(是最终的)而不是改变。 这只是故事的一半。因为这些对象是不可变的,所以您正在创建一个新实例,而不是在它们上调用方法,因此重新分配变量正在引用的 objexct。如果你做了 col = new ArrayList() 你会看到同样的行为 实际上这不是一个有效的答案。他并没有尝试在代码中的任何地方更改不可变对象。 可变性与这个问题无关。分配任何类型的引用永远不会影响所引用的对象,无论是哪种对象。 “变异”引用指向的对象的唯一方法是调用对象上的方法,就像他对add
所做的那样。他没有对Integer
这样做(好吧,碰巧Integer
上没有任何方法可以改变它;但这不是重点),所以这就是为什么它不一样。【参考方案4】:
这里创建的对象会在大括号()结束后销毁
【讨论】:
不,col.add(new Integer(1));
呢以上是关于通过参考 Java。整数 ins 没有被修改,Collection 被修改,为啥? [复制]的主要内容,如果未能解决你的问题,请参考以下文章