https://blog.csdn.net/m0_65819602/article/details/132797092
Java中的值传递是指将实参的值复制一份传递给形参,在函数内部对形参的修改不会影响实参的值。
当一个变量被传递给一个方法时,实际上传递的是该变量的一个副本,而不是变量本身。因此,如果在方法中修改了参数的值,那么这个修改不会影响到原始变量的值。
例如,下面的代码演示了Java中的值传递:
public class ValuePassingExample {public static void main(String[] args) {int x = 10; System.out.println("Before calling changeValue: " + x); changeValue(x); System.out.println("After calling changeValue: " + x); }public static void changeValue(int num) { num = 20; }}
在上面的例子中,changeValue()
方法接收一个整数参数num
,并将其赋值为20。然而,在调用changeValue()
方法后,变量x
的值仍然是10,因为实参的值没有被修改。
String是一个不可变的类。这意味着一旦一个String对象被创建,它的值就不能被修改。任何对String对象的修改操作都会返回一个新的String对象,而原始的String对象保持不变。
例如,考虑以下代码:
public class StringImmutabilityExample {public static void main(String[] args) {String str = "Hello"; System.out.println("Before calling concat: " + str); str = concat(str, " World"); System.out.println("After calling concat: " + str); }public static String concat(String str1, String str2) {return str1 + " " + str2; }}
在上面的例子中,concat()
方法接收两个字符串参数str1
和str2
,并将它们连接起来,中间用空格隔开。然而,由于String是不可变的,因此在调用concat()
方法后,变量str
的值仍然是"Hello",而返回的新字符串对象被赋值给了str
。这是因为在Java中,String对象是不可变的,任何对String对象的修改操作都会返回一个新的String对象。
需要注意的是,虽然String本身是不可变的,但是String对象所引用的字符数组是可以改变的。例如,可以使用char[]
数组来修改String对象中的字符数组,从而改变String对象的内容。
Java中的值传递和String不可变的联系和区别可以从以下几个方面来理解: