Java教程

Java 到底是值传递还是引用(址)传递?

本文主要是介绍Java 到底是值传递还是引用(址)传递?,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

写代码的时候遇到一个非常有意思的问题,至于过程在此就不多提了,略显尴尬,直入正题吧。

 

首先纠正常见的三个错误的理解

 

(1)Java是引用传递

(2)普通类型是值传递,引用类型是址传递

(3)普通类型是值传递,对象类型是址传递

 

小案例

int num = 10;
String str = "hello";

 

 

num = 20;
str = "java";

 

 

 

对于基本类型 num ,赋值运算符会直接改变变量的值,原来的值被覆盖掉。
对于引用类型 str,赋值运算符会改变引用中所保存的地址,原来的地址被覆盖掉。但是原来的对象不会被改变(重要)。
如上图所示,"hello" 字符串对象没有被改变。(没有被任何引用所指向的对象是垃圾,会被垃圾回收器回收)

 

划重点(关键在于理解这个)

StringBuilder sb = new StringBuilder("iphone");
void foo(StringBuilder builder) {
builder = new StringBuilder("ipad");
}
foo(sb); // sb 没有被改变,还是 "iphone"。

 

 

 

 

值传递和引用传递之前的区别的重点是什么?

 

 

 

最终结论

Java中方法参数传递方式是按值传递。
如果参数是基本类型,传递的是基本类型的字面量值的拷贝。
如果参数是引用类型,传递的是该参量所引用的对象在堆中地址值的拷贝。

这篇关于Java 到底是值传递还是引用(址)传递?的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!