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