String类型的2个参数变量之间传递的是地址还是值?java的参数都是值传递的。但行参存的是值么?如: class A{
    String s="hello";
    int n=0;
    public A(){
    
    }
    public A(String str){
        this(str,10);
    }
    public A(String str1,int i){
        s=str1;
        n=i;
    }
    public static void main(String[] args){
    A t = new A("ok");
    t.s==s   //此处相等么
    }
}

解决方案 »

  1.   

    传值。
    在Java 中分两种数据类型:基本和引用。
    String 是引用类型,它里面存放的是内容地址,地址指向它所代表的对象。而String 的对象不是Java的数据类类型,引用才是!
    你上面的那个例子改变的是引用所指向对象的值,没有改变引用的值没有改变。
    其实你这个例子正好证明Java到底是传值还是传值--因为对象的引用没有改变!
      

  2.   

    右边的S无法访问吧? 除非是static的
    肯定是相等的,因为它们拥有指向同一个内存的指针
      

  3.   

    static方法 只能访问静态实例,
    除了基本类型(整形,字符,boolean),传递的都是对象的地址的值。
      

  4.   

    1.t.s==s;//静态变量可以直接访问,所以得在 String s="hello";前面加static才能直接访问。
    2.String类型对象不可以改变。调用构造器时改变的只是一个副本,所以改变不了s。
    3.可以在相应构造器中添加System.out.println(s);看看副本的作用范围.
      

  5.   

    String类型的引用不可以改变。
    值传递,应该是相等的
      

  6.   

    static方法可以访问静态方法和静态变量。
      

  7.   

    class A{ 
        String s="hello"; 
        int n=0; 
        public A(){ 
        
        } 
        public A(String str){ 
            this(str,10); 
        } 
        public A(String str1,int i){ 
            s=str1; 
            n=i; 
        } 
        public static void main(String[] args){ 
        A t = new A("ok"); 
        t.s==s  //此处相等么 //比较不了,这个s是哪里的?非静态成员属性依赖与对象存在,所以报错,不过String是对象,所以传参数是传地址。
        } 
    }
      

  8.   

    相等!不过你这句代码String s="hello";前面得加static,因为在静态方法中不能使用非静态的变量!
      

  9.   

    static String s="hello";这样声明
    t.s==s才有能比,不能从静态上下文引用非静态变量。是传了值还是传了引,建议阅读http://zangweiren.javaeye.com/blog/214369
      

  10.   

    java的参数都是引用传递,而不是值传递的或者地址传递,形参中还是存的还是引用。
      

  11.   

    值传递的例子,和你的代码比较着理解一下
    public class CallByValueRef {
    static String  s="asd";
    public static void modify(String s1){
     s1="sfdsh";
     System.out.println("s1 is "+s1);
    }
    public static void main(String[] args){
     modify(s);
     System.out.println(s);
    }
    }
    在modify方法中改变的s1副本,对s无影响。
      

  12.   

    记住:Java中,基本数据类型作参数时传的是值,某类的对象作参数时传的是引用
      

  13.   

    我就把运行过程写一下吧!
    先在脑中想一下,我们在内存中三个地方,分别为:栈,堆,静态数据区
    栈中有:t<引用>
    堆中有:一个对象t,它里面有:s,n
    静态数据区:s<为了区分开,这里我叫它ss>
    这里面的ss其实就是指向堆内存中的 s.