java的基本数据类型的包装类是引用类型吗?

public void test(Integer index){

index = new Integer(20);

}

Integer i = new Integer(30);

test(i);

System.out.println(i); //打印30

请问上面的示例中为什么打印的是30而非20?数据类型" title="基本数据类型">基本数据类型的包装类不是引用类型吗?

回答:

引用JVM规范中的一段,详情参见

For every parameter declared in a method declaration, a new parameter variable is created each time that method is invoked. The new variable is initialized with the corresponding argument value from the method invocation.

规范中说每次方法调用,方法中的参数都会初始化。

上面test方法的index就是初始化了一个Integer类型的变量然后指向传入的i。后面的index = new Integer(20); 只是改变了index变量的指向,原来i的指向并没有改变。

回答:

java 中方法用到的都是值传递,即使是引用,传递的也是原来引用的一个拷贝值

方法只能让参数引用中的属性改变,而不能改变参数的引用地址

而且你可以看Integer的源码:

图片描述

它包装的值value是被final修饰的,也就是只能被赋值一次,赋值后值不再改变。

另外你可以试一下别的引用类型,看看能不能被改变,比如String

以上是 java的基本数据类型的包装类是引用类型吗? 的全部内容, 来源链接: utcz.com/p/178774.html

回到顶部