任何人都可以解释为什么实例变量'root'为空?
public class Test{
String root;
public void assignRoot(){
baseAssignment(root);
}
public void baseAssignment(String root){
if(root == null){
System.out.println("root:"+root);
root = "assigned!";
return;
}
}
public String toString(){
return root;
}
public static void main(String args[]){
Test t = new Test();
t.assignRoot();
System.out.println(t);
}
}
我的输出是:
root:null
null
但我期待
root:null
assigned!
答案 0 :(得分:4)
无需在类中传递方法调用的实例变量:
public class Test{
String root;
public void assignRoot(){
baseAssignment();
}
public void baseAssignment(){
if(root == null){
System.out.println("root:"+root);
root = "assigned!";
return;
}
}
public String toString(){
return root;
}
public static void main(String args[]){
Test t = new Test();
t.assignRoot();
System.out.println(t);
}
}
输出:
$ javac Test.java
$ java Test
root:null
assigned!
或者您可以使用this.root="assigned!"
来引用实例变量而不是本地参数。
答案 1 :(得分:1)
您只是为方法中的本地参数root
分配值,而不是类属性root
。重命名参数或使用前面的this
- 关键字,它应该有效。
可以找到一个很好的解释,为什么它的行为,here。
答案 2 :(得分:1)
因为在baseAssignment()
方法中您没有初始化字段root
,所以只需更改本地参数root
。
而不是:
root = "assigned!";
你应该写:
this.root = "assigned!";
答案 3 :(得分:0)
if(root == null){
System.out.println("root:"+root);
this.root = "assigned!";
您应该使用this.root
,因为您只更改了作为名为root
的参数给出的字符串的值。
答案 4 :(得分:0)
我的方法参数应始终为final
。制作参数root
final
会导致编译错误
root = "assigned!";
您必须分配到this.root
。将您的代码更改为:
public void baseAssignment(final String root){
if(root == null){
System.out.println("root:"+root);
this.root = "assigned!";
return;
}
}
答案 5 :(得分:0)
使用任何一种方法..
public void baseAssignment(String root){
if(root == null){
System.out.println("root:"+root);
// root = "assigned!";
this.root = "assigned!";
return;
}
}
或
public void baseAssignment(String root1){
if(root1 == null){
System.out.println("root:"+root);
root = "assigned!";
return;
}
}
如何解释
Class MyClass{
String root="";
public void baseAssignment(String root){
root = "local variable"; // pointing to method local variable root
System.out.println("root:"+root);
this.root = "class variable"; // pointing to class variable root
System.out.println("root:"+this.root);
}
}
输出:
root:local variable
root:class variable