Java是值传递还是引用传递,怎么理解值传递还是引用传递?
时间: 2024-05-14 13:18:11 浏览: 11
Java是值传递。
值传递(pass by value)是指在函数调用时,实参将自己的值复制一份传递给形参,形参对复制值的任何修改都不会影响到实参本身。换句话说,值传递传递的是实参的副本。
引用传递(pass by reference)是指在函数调用时,实参的地址被传递给形参,形参对该地址所指向的对象进行修改时,实参也会相应地发生改变。换句话说,引用传递传递的是实参的地址。
在Java中,基本类型(如int、float等)是值传递,而对象类型(如String、List等)也是值传递,但是传递的是对象的引用(即地址),因此在方法中修改对象的属性会改变原对象的属性。
例如:
```
public class Test {
public static void main(String[] args) {
int a = 1;
change(a);
System.out.println(a); // 输出1
StringBuilder sb = new StringBuilder("hello");
change(sb);
System.out.println(sb.toString()); // 输出world
}
public static void change(int b) {
b = 2;
}
public static void change(StringBuilder s) {
s.append("world");
}
}
```
在上面的代码中,change方法对基本类型参数进行修改时,并不会影响到原来的变量a,而对对象类型参数StringBuilder进行修改时,会改变原来的对象sb。这是因为基本类型传递的是值的副本,而对象类型传递的是对象的引用。