String是引用数据类型 但是是值传递 怎么理解?
String是引用数据类型 但是是值传递 怎么理解?
引用数据类型不是在方法中修改的值 更改吗?
求大神详解一下 举例子啊
------解决方案--------------------java的所有参数传递都是值传递,不管基本类型还是引用类型
举个最简单的例子:
public class Test {
public static void swap (String str1, String str2) {
String tmp = str1;
str1 = str2;
str2 = tmp;
System.out.println("str1:" + str1 + " - " + "str2:" + str2);
}
public static void main(String[] args) {
String strA = "a";
String strB = "b";
swap(strA, strB);
System.out.println("strA:" + strA + " - " + "strB:" + strB);
}
}
这个demo运行结果是:
str1:b - str2:a
strA:a - strB:b
也就是swap方法没有达到交换的目的,为什么呢?
因为传递的时候是声明了一个str1,指向了strA所指向的对象,你理解成是把strA所保存的对象地址传递给了str1就行。
c++中有两种传参方式,值传递和引用传递,其引用传递能达到交换的目的,而java不行,java只有值传递,基本类型的值就是其本身,引用类型的值是对象地址。
可能讲解的不是很清楚,你可以看看《java核心技术 卷Ⅰ》中第四章第5节“方法参数”的讲解,专门讲这个的