引用变量的指向可以是多个吗
在父类对象调用成员方法中改变成员变量(引用变量的指向)后,是一个引用变量可以同时指向两个地址吗
public class Test {
String name="Tom";
public Test(String name){
name=name;
}
public static void main(String [] args){
Test t = new Test("Jack");
System.out.println(t.name);
}
}
A. null
B. Tom
C. Jack
D. " "
正确答案:B
------解决方案--------------------先教如何贴代码:
String str = "abc";
第一个问题:一个引用只能指向一个对象,一个对象可以被多个引用指向。
第二个问题:在构造方法中:name=name并没过改变Test的name值,如果是this.name=name就可以了
------解决方案--------------------一个变量在同一时间不能指向不同的地址,
在构造函数的参数与成员名同名时,成员名被隐藏,所以你的构造函数相当于什么都没做
除非你改变构造函数的形参名字或使用this.name来访问成员
public class Test {
String name = "Tom";
public Test(String otherName) {
name = otherName;
}
public static void main(String[] args) {
Test t = new Test("Jack");
System.out.println(t.name);
}
}
或
public class Test {
String name = "Tom";
public Test(String name) {
this.name = name;
}
public static void main(String[] args) {
Test t = new Test("Jack");
System.out.println(t.name);
}
}
------解决方案--------------------你这没有改变成员变量,Test方法无任何意义。
想改变:
this.name = name;
this指的就是Test自己
------解决方案--------------------类中定义成员变量说法没问题,
假如你说的是private定义的非静态变量,那么与方法里的定义变量用起来表面没有区别:
1 类变量可以在整个类中用,不用传参数,这就导致一个问题并发性问题,这种变量并发不安全.
2 如果要定义类变量,最好是不可改变的常数,这样就不会有并发问题.
3 如果不想导致并发问题,把变量定义在方法里就好了(当然会失去细微的性能,但在上百万次/分调用中不影响).
4 只要肯定不会有并发性问题,随你自己怎么定义.
------解决方案--------------------另外,类变量可以与方法中的变量同名,如果用不用this区分,java默认是先用方法中同名变量.