public class Test {
String a=new String("1");
char [] c={'1','2','3'};
public static void main(String[] args) {
Test t=new Test();
t.show(t.a,t.c);
System.out.print(t.a);
System.out.print(t.c[0]);
}
public void show(String a,char c[]){
a="2";
c[0]='g';
}
}这写代码 为什么输出的是  1和g 而不是 2和g? String 在JAVA中到底属于什么数据类型啊

解决方案 »

  1.   

    String引用类型,但是java是值传递。
      

  2.   

    java中基本类型是值传递,对象类型是引用传递
      

  3.   

    String是引用类型的,但是又很特殊,因为它的值是无法改变的,改变的只能是地址。然而当String作为参数时传递的不是地址而是值,所以你得那个代码里栈空间里只有一个地址而且没被改变,而堆里却开辟了两个空间:一个“1”,另一个是“2”
      

  4.   

    public void show(String a,char c[]){
    a="2";  //这句话并不改变t.a得值,而是另外在堆中申请个对象,里面的值为“2”,并让a指向这个对象
    c[0]='g';
    }