黑马程序员技术交流社区
标题:
为何输出good and gbc
[打印本页]
作者:
包晗
时间:
2013-6-4 19:37
标题:
为何输出good and gbc
public class TestString
{
String str = new String("good");
char[] ch = { 'a', 'b', 'c' };
public static void main(String[] args) {
TestString ex = new TestString();
ex.change(ex.str, ex.ch);
System.out.print(ex.str + " and ");
System.out.print(ex.ch);
}
public void change(String str, char ch[]) {
str = "test ok";
ch[0] = 'g';
}
}
复制代码
水一把 嘿嘿
作者:
神之梦
时间:
2013-6-4 20:02
本帖最后由 神之梦 于 2013-6-4 20:10 编辑
楼主如果这样写的话,应该就是楼主要的答案了,至于为什么??????
public class Test
{
String str = new String("good");
char[] ch = { 'a', 'b', 'c' };
public static void main(String[] args) {
Test ex = new Test();
ex.str=ex.change(ex.str, ex.ch);
System.out.print(ex.str + " and ");
System.out.print(ex.ch);
}
public String change(String str, char ch[]) {
ch[0] = 'g'; return str = "test ok";
}
}
复制代码
楼主在方法中重新给ex.str重新赋了值,但是没有返回,
str 是一个对象的引用,因为String类的特殊性,你不能改变字符串这个对象。
在change方法中将str指向了一个新的字符串对象。但是这个方法执行完了,str的重新指向也就挂了。
所以这里加返回的话,才能实现。数组的对象存在于堆内存中,对于数组的操作,我想应该不用多解释了吧。。。。。。。。。。。。。。。
作者:
王军行
时间:
2013-6-4 20:05
public void change(String str, char ch[]) {
//这个str是你传入的参数str
str = "test ok";
ch[0] = 'g';
}
这段代码错误,你的意思是把 "test ok"赋值给对象ex的变量str吧
你应该加this.来实现 你的第二句是把类中的ch[0]赋值成‘g’,但是你传入一个char类型的参数ch[] 做什么?我看不明白
public void change(String str, char ch[]) {
this.str = "test ok";
//传入的参数 ch[]没用,str也用
ch[0] = 'g';
}
作者:
喜欢流浪
时间:
2013-6-4 20:19
简单的说:
public void change(String str, char ch[]) {
str = "test ok";
ch[0] = 'g'; }
你没有返回值;所以ex.str 依旧是good ;至于数组,是引用型的;你把角标为0的数组元素重新赋值g,地址没变,但是堆内存中值变了,所是gbc
作者:
孔雀东南飞
时间:
2013-6-5 21:22
public class TestString
{
String str = new String("good");
char[] ch
= { 'a', 'b', 'c' }
public static void main(String[] args) {
TestString ex = new TestString();
ex.change(ex.str, ex.ch);
System.out.print(ex.str + " and ");
System.out.print(ex.ch);
}
public void change(
String str
, char ch[]) {
str
= "test ok";
ch[0]
= 'g';
}
}
楼主:
1、你要明白局部变量与成员变量的用法,当成员变量名与函数局部变量名重名时,默认使用局部变量,若想使用成员变量要用this,因此:
public void change(
String str
, char ch[]) {
str
= "test ok";//此时的str是局部变量,即用红色标出的,是同一个局部变量,与上文定义的成员变量无关,此时局部变量str值为test ok。
//对象ex的成员变量str值仍然为good。
ch[0] = 'g';//在这里,ch[0]是上文的成员变量,其值为a,因为局部变量char ch[] 只是定义了char类型的引用,其值为null,不可能是ch[0].因此成员变量ch值为gbc。
2、在代码中用红色标出的是同一个变量,用蓝色标出的是同一个变量。
}
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2