通过Ref Java。整数没有修改,集合被修改,为什么?

时间:2013-02-27 10:51:10

标签: java collections integer pass-by-reference

我有两个我不明白的例子

Java将值作为变量传递或通过引用传递

为什么在Ref类中整数变量不会更改(null)? 为什么在RefCol类中修改了集合变量col(1)

课程参考:

test(): entero: 5

inicio(): entero: null

class 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);
    }

}

4 个答案:

答案 0 :(得分:3)

您正在将REFERENCE的COPY传递给对象实例。

如果直接更改对象。例如col.add它将改变基础对象。

如果更改了它正在引用的对象。例如。 new Integer()它只会更改局部变量的引用。

答案 1 :(得分:3)

不一样。

entero = new Integer(5);

更改参考entero,而

col.add(new Integer(1));

更改引用的对象col

答案 2 :(得分:-2)

简而言之:原始类型和“原始包装器(整数,长,短,双,浮点,字符,字节,布尔)”不能通过引用进行更改。

检查http://en.wikipedia.org/wiki/Immutable_object详细信息

答案 3 :(得分:-4)

{ 这里创建的对象将在大括号(})

结束后销毁

}