黑马程序员技术交流社区
标题: 来看看 [打印本页]
作者: 马伟恒 时间: 2012-4-25 00:10
标题: 来看看
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,
有点不懂了
作者: 真真姐 时间: 2012-4-25 00:24
本帖最后由 杨国祯 于 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");- // 方法中的局部变量只是与成员变量同名,并没有对成员变量构成修改! 修改为(String str1,char[] ch)结果就变化!
复制代码 System.out.print(t.ch);
}
作者: 郑光 时间: 2012-4-25 00:29
原因很简单,参数传递嘛,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:35
本帖最后由 徐鑫 于 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);
}
作者: 程序猿 时间: 2012-4-25 00:48
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
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |