关于 java.lang.String 的 所谓的 事实上不是的 值传递

关于 java.lang.String 的 所谓的 实际上不是的 值传递
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个基础类型对应的包装类型全部都是不可变对象,都是值传递。