java中什么时候是引用什么时候是复制
时间: 2023-08-06 17:07:48 浏览: 36
Java 中的基本数据类型(如 `int`、`double`、`boolean` 等)都是按值传递的,也就是说,在将一个基本数据类型的值传递给一个方法时,实际上是将该值的一个副本传递给了方法,而不是该值本身。因此,对方法内部的参数进行修改不会影响到原始值。
而对于对象类型(如 `String`、`List`、`Map` 等)来说,变量存储的是对象的引用,而不是对象本身。因此,将一个对象作为参数传递给方法时,实际上传递的是对象的引用,也就是指向该对象的一个指针。在方法内部对对象的修改会影响到原始对象。
需要注意的是,对于不可变对象(如 `String`、`Integer`、`Double` 等),修改操作实际上是创建了一个新的对象,而原始对象并没有发生变化。因此,在方法内部对不可变对象的修改并不会影响到原始对象。例如:
```java
public static void main(String[] args) {
String s = "Hello";
changeString(s);
System.out.println(s); // 输出 Hello
}
public static void changeString(String str) {
str += " World";
}
```
在 `changeString` 方法中,对字符串进行了拼接操作,但是并没有修改原始字符串 `s`,因此在 `main` 方法中输出的依然是原始字符串 `Hello`。
总之,Java 中的数据类型分为基本数据类型和对象类型,对于基本数据类型,按值传递;对于对象类型,按引用传递。但是需要注意的是,在对不可变对象进行修改时,实际上是创建了一个新的对象,原始对象并没有被修改。