关于 java.lang.String 的 所谓的 事实上不是的 值传递
关于 java.lang.String 的 所谓的 实际上不是的 值传递
http://bbs.csdn.net/topics/390820518
总有人说String是值传递 会拷贝堆中的内存
到底是不是这样呢 其实可以试验一下(希望有人告诉我结果)
------解决方案--------------------
这是死循环的节奏么
------解决方案--------------------
cpu占用率25%
------解决方案--------------------
Java函数调用,永远是传值。但String是一个引用类型,所以String变量的值不是字符串的内容,而是这个字符串的地址。
所以你传一个String到别的函数,实际给的是String的地址。
------解决方案--------------------
顶楼上的……
------解决方案--------------------
String对象只能引用,你可以看看。
------解决方案--------------------
4楼解释是对的,new 出的String 是对象,本应传递引用,但String 是不可变对象,所以在其值创建后,无法对其值做修改,所以跟值传递一个效果。
顺便说一下,8个基础类型对应的包装类型全部都是不可变对象,都是值传递。
http://bbs.csdn.net/topics/390820518
总有人说String是值传递 会拷贝堆中的内存
到底是不是这样呢 其实可以试验一下(希望有人告诉我结果)
import java.util.Scanner;
public class java {
public static int i = 0;
public static Scanner sc = new Scanner(System.in);
public static byte[] buffer = new byte[1024*1024*50]; // 50兆的字符串 你猜他会递归多少次呢?
public static String arg = new String(buffer);
public static void digui(String arg) {
int j = ++i;
System.out.println("这个是第 N 次递归了"+j);
sc.next();
digui(arg);
System.out.println("这个是第 N 次递归完成了 "+j);
}
public static void main(String[] args) {
digui(arg);
}
}
------解决方案--------------------
这是死循环的节奏么
------解决方案--------------------
cpu占用率25%
------解决方案--------------------
Java函数调用,永远是传值。但String是一个引用类型,所以String变量的值不是字符串的内容,而是这个字符串的地址。
所以你传一个String到别的函数,实际给的是String的地址。
------解决方案--------------------
顶楼上的……
------解决方案--------------------
String对象只能引用,你可以看看。
------解决方案--------------------
4楼解释是对的,new 出的String 是对象,本应传递引用,但String 是不可变对象,所以在其值创建后,无法对其值做修改,所以跟值传递一个效果。
顺便说一下,8个基础类型对应的包装类型全部都是不可变对象,都是值传递。