Java的String是值传递还是引用传递?
java string值传递,可以参考如下解释:Java 编程语言只有值传递参数。当一个对象实例作为一个参数被传递到方法中时,参数的值就是该对象的引用一个副本。
首先String是引用传递,String在Java中是对象。但是,因为String是java中最常用的对象,所以它的内存存储与一般的对象不一样。一般对象是存储于在 堆结构里面,即使是相同参数的对象,在内存中也是占据不同位置的。
String 类型的传递 是引用传递。也即是地址传递。传的是str的地址。把str里“good”的地址传给change()方法里的str。change()里的str赋予新的地址。是“test ok”的地址。此时ex.str对“good”的引用没变。
java中基本数据类型是按照值传递,其他类生成的对象,必然是按照引用传递。String,StringBuffer 生成的对象,毫无疑问不是基本数据类型(或者叫原始数据类型),因此按引用传递。
java里String类型可以直接赋值,保存的是值还是引用的地址?
1、本质上string 是引用类型的。string a=xxxa指向字符串xxx所在的地址。string b=a;会把a的地址给b,此时a和b保存相同的地址,所以他们的值是相同的。
2、String是引用数据类型,因为它是类类型,而类类型都是引用数据类型。
3、在编译阶段会直接合并成语句String str=”JAVA”,于是会去常量池中查找是否存在”JAVA”,从而进行创建或引用。对于final字段,编译期直接进行了常量替换(而对于非final字段则是在运行期进行赋值处理的)。
java中String类型实例的引用传递问题
1、String 类型的传递 是引用传递。也即是地址传递。传的是str的地址。把str里“good”的地址传给change()方法里的str。change()里的str赋予新的地址。是“test ok”的地址。此时ex.str对“good”的引用没变。
2、而一般Java教材中提到的“值传递”,是指这些“变量”的内容的传递,不是Java堆中的对象实体的传递。你用字符串来做实验,并推广为所有Java对象的做法,并不是特别合适。
3、java string值传递,可以参考如下解释:Java 编程语言只有值传递参数。当一个对象实例作为一个参数被传递到方法中时,参数的值就是该对象的引用一个副本。
4、在这里,String 类型的传递是引用传递,也即是地址传递。这个是毋庸置疑的。因为在java里,String是对象类型,作为参数肯定是引用传递。
5、在调用 test(str); 时,把 str 的一个副本传递了出去,str 现在仍然存储的是一个指向“hello” 的地址,这一点没有变。
6、java中基本数据类型是按照值传递,其他类生成的对象,必然是按照引用传递。String,StringBuffer 生成的对象,毫无疑问不是基本数据类型(或者叫原始数据类型),因此按引用传递。