黑马程序员技术交流社区
标题:
好像是关于变量的局部还是全局的问题。
[打印本页]
作者:
黑马-张洋
时间:
2013-2-26 10:56
标题:
好像是关于变量的局部还是全局的问题。
package com.exam;
public class test {
/**
* @param args
*/
public static void main(String[] args) {
student s1=new student();
System.out.println(s1.s);
s1.Change(s1.s);
System.out.println(s1.s);
}
}
class student
{
String s=new String("未变前");
void Change(String s){
s="变了后";
}
}
复制代码
打印结果:两次都是”未变前“
为什么没有变
作者:
陈圳
时间:
2013-2-26 11:05
没变很正常,你要输出的就是
你想他改变应该在change()方法里加上这句:
this.s=s;
作者:
罗海云
时间:
2013-2-26 11:09
package com.exam;
public class test {
/**
* @param args
*/
public static void main(String[] args) {
student s1=new student();
System.out.println(s1.s);
s1.Change(s1.s);
System.out.println(s1.s);
}
}
class student
{
String s=new String("未变前");
void Change(String s){
s="变了后";
//这儿你注意下.你赋值赋到形参上了....这样写就不出问题了.this.s = s;
}
}
作者:
黑马刘杰
时间:
2013-2-26 11:11
void Change(String s){//这里s指向你传过来的对象“未变前”
//这里s指向一个新对象“变了后”,这句执行完,你的s1指向的堆内存中还是“未变前”,没有变。
s="变了后";
}
复制代码
作者:
夏振博
时间:
2013-2-26 11:19
这时候可以看出this关键字可以区分属性(全局变量)和局部变量,加this表示该变量为全局变量。
作者:
vaanmax
时间:
2013-2-26 12:13
本帖最后由 vaanmax 于 2013-2-26 12:15 编辑
其实基本上大家都已经说明了你的问题了,我就附上刚才改了一下的代码,可以执行了,你看下吧。
package com.itheima;
public class da {
/**
* @param args
*/
public static void main(String[] args) {
student s1=new student();
System.out.println(s1.s);
s1.Change("改变了");
System.out.println(s1.s);
}
}
class student
{
String s = "未变前";
String Change(String s){
return this.s = s;
}
}
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2