public void test(Integer index){
index = new Integer(20);
}
Integer i = new Integer(30);
test(i);
System.out.println(i); //打印30
请问上面的示例中为什么打印的是30而非20?基本数据类型的包装类不是引用类型吗?
public void test(Integer index){
index = new Integer(20);
}
Integer i = new Integer(30);
test(i);
System.out.println(i); //打印30
请问上面的示例中为什么打印的是30而非20?基本数据类型的包装类不是引用类型吗?
java 中方法用到的都是值传递,即使是引用,传递的也是原来引用的一个拷贝值
方法只能让参数引用中的属性改变,而不能改变参数的引用地址
而且你可以看Integer的源码:
它包装的值value是被final修饰的,也就是只能被赋值一次,赋值后值不再改变。
另外你可以试一下别的引用类型,看看能不能被改变,比如String
15 回答8.4k 阅读
8 回答6.2k 阅读
1 回答4.1k 阅读✓ 已解决
3 回答2.2k 阅读✓ 已解决
2 回答3.1k 阅读
2 回答3.8k 阅读
3 回答1.7k 阅读✓ 已解决
引用JVM规范中的一段,详情参见
规范中说每次方法调用,方法中的参数都会初始化。
上面
test
方法的index
就是初始化了一个Integer
类型的变量然后指向传入的i
。后面的index = new Integer(20);
只是改变了index
变量的指向,原来i
的指向并没有改变。