A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 马伟恒 中级黑马   /  2012-4-25 00:10  /  1394 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

public class Test{

String str=new String("good");

char[] ch={'a','b','c'};

public void change(String str,char ch[]){

str="test ok";

ch[0]='g';

}

public static void main(String args[]){

Test t=new Test();

System.out.println(t.str);

t.change(t.str,t.ch);

System.out.print(t.str+"and");

System.out.print(t.ch);

}

}


结果是goodandgbc,而不是test okandgbc,

有点不懂了

4 个回复

正序浏览
String类型一旦实例化后变不可修改。字符串是常量,也不可更改。具体的上面讲的很清楚。
但是传入对象就不一样了

class Test
{


        String str=new String("good");


        char[] ch={'a','b','c'};


        void change(Test test)
        {


        test.str="test ok";


        test.ch[0]='g';
        }
        }

public  class oy {

public static void main(String[] args) {

        Test t=new Test();


        System.out.println(t.str);


        t.change(t);


        System.out.print(t.str+"and");


        System.out.print(t.ch);
       
}

}


此时输出的结果是
good
test okandgbc

回复 使用道具 举报
本帖最后由 徐鑫 于 2012-4-25 00:37 编辑

分析一下代码:

public static void main(String args[]){

Test t=new Test();

System.out.println(t.str);

t.change(t.str,t.ch);//这里将t.str作为参数传入了方法,它这里是传址,也就是一个引用地址,这时方法内的str指向"test ok"这个地址,但是t.str的地址没有改变,对应的对象也没有改变 (是局部变量)

System.out.print(t.str+"and");//所以这里t.str值还是good

System.out.print(t.ch);

}
回复 使用道具 举报
原因很简单,参数传递嘛,t.str这个str是类中成员变量的str,这个str就是good,这个没问题吧?
change方法里的参数str只是在这个方法里有一个局部变量str的值是“test ok”,和成员变量的str没有任何关系,这里的str有点迷惑性,你可以任意改,比如
public void change(String s,char ch[]){
s="test ok";
ch[0]='g';
}这里的s和成员变量的str有关系吗?

回复 使用道具 举报
本帖最后由 杨国祯 于 2012-4-25 00:42 编辑

变量都有作用域,这里是局部变量,把同名的成员变量覆盖了!

String str = new String("good");         
                char[] ch ={ 'a', 'b', 'c' };     
                public void change(String str, char[] ch)    // 换为(String str1, char[] ch) 你试试这样的话是多少呢!
                        {
                                str = "test ok";    // 因为str是参数传递进来的,已经有值了,而且是局部变量;

                                ch[0] = 'g';
                        }
                public static void main(String args[])
                        {
                                TextFin t = new TextFin();
                                System.out.println(t.str);
                                t.change(t.str, t.ch);
                                System.out.print(t.str + "and");
  1. // 方法中的局部变量只是与成员变量同名,并没有对成员变量构成修改! 修改为(String str1,char[] ch)结果就变化!
复制代码
System.out.print(t.ch);
                        }
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马