黑马程序员技术交流社区
标题:
构造函数参数与类中的变量重名时不用this也可以赋值。Why?
[打印本页]
作者:
陆鹏
时间:
2012-6-15 18:22
标题:
构造函数参数与类中的变量重名时不用this也可以赋值。Why?
本帖最后由 陆鹏 于 2012-6-15 18:44 编辑
class Person
{
String name;
Person(String name)
{
name=name;
System.out.println("name="+name);
}
}
class Demo
{
public static void main(String[] args)
{
Person a=new Person("Jack");
}
}
结果:name=Jack
为什么呀?
作者:
麦田守望者0812
时间:
2012-6-15 18:28
构造函数中 给成员变量赋值时 this关键字可以省略
作者:
火焱
时间:
2012-6-15 18:30
构造函数
Person(String name)
{
name=name;
System.out.println("name="+name);
},其中的name=name;实际上是给参数name赋值,而不是给类中成员变量的name赋值,打印出来的name其实是Person()中的参变量
作者:
晏文根
时间:
2012-6-15 18:33
这个是可以的,其实name=name;就是this.name=name。只是省略了this。
在这里之所以一般都写this.name=name 是为了当方法参数与变量名相同时,用于区分参数名与变量名用的
作者:
宋浩
时间:
2012-6-15 18:33
楼主,请注意你打印打并非是成员变量name的值,而是形参name的值:
class Person
{
String name;
Person(String name)
{
name=name;
System.out.println("name="+name);//这里打印的参数name,不是成员变量
}
}
public class Demo
{
public static void main(String[] args)
{
Person a=new Person("Jack");
System.out.println("name:"+a.name);
}
}
复制代码
运行结果如下:
name=Jack
name:null
如果不想用this的话,必须不要跟成员变量的名字相同,要不就要加this 。。。
作者:
张洁
时间:
2012-6-15 18:38
这个this是
默认存在
的~
既然默认,为什么经常要输入呢?
我觉得有俩原因:
1、很多时候输入this(尤其是在Eclipse中)是
为了方便下一步的操作
当你输入this.的时候后面直接会刷~的出现一串,这样你选就可以啦,不用再全部操作~
2、
方便阅读
~要不就像这里的name = name;一样容易看的晕~
作者:
陌花╮有意、
时间:
2012-6-15 18:42
有理由相信是不能赋值的,如下:
class Person {
String name;
Person(String name) {
//1.2
name = name;
//1.3 这里的name是与Person类定义的name属性无关的
System.out.println("name=" + name);
//1.4 之所以能打印,是由于传入的局部变量name的作用域还有效
}
}
class Demo6 {
public static void main(String[] args) {
Person a = new Person("Jack");
//1.1 程序从这里执行
System.out.println(a.name);
//1.5 从这里的打印结果就可以验证并未赋值成功
}
}
结果:
name=Jack
null
作者:
郑冬
时间:
2012-6-15 18:48
不加this是参数的name,而不是类的成员变量name
作者:
李盼
时间:
2012-6-16 08:31
class Person
{
String name;
Person(String name)
{
name=name;
System.out.println("name="+name);
}
}
你没加this,那么name就是这个构造函数内部的局部变量name了,而你的SOP又是在构造函数内部,所以打印的当然是局部变量啊,如果你把SOP移出来,或者 System.out.println("name="+this.name);试试看,就知道成员变量name还是没有被赋值的!
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2