java中的空引用
我有一段代码,我必须知道如何分配内存java中的空引用,java,Java,我有一段代码,我必须知道如何分配内存 public class Demo { public void checkNullReference(){ ConsumerName name = null; addReference(name); System.out.println(name.getConsumerName()); } public void addReference(ConsumerName name){ name = new ConsumerNa
public class Demo {
public void checkNullReference(){
ConsumerName name = null;
addReference(name);
System.out.println(name.getConsumerName());
}
public void addReference(ConsumerName name){
name = new ConsumerName();
name.setConsumerName("KRISHNA");
}
public static void main(String []args){
Demo demo = new Demo();
demo.checkNullReference();
}
}
代码给出了空指针异常,我给了一个引用object to method,在那里我给它分配了新的对象,并设置了名称,如果我重写了这个方法,那么一切都会按预期进行
public void checkNullReference(){
ConsumerName name = new ConsumerName();
addReference(name);
System.out.println(name.getConsumerName());
}
不能从被调用方法更改调用方法中的引用。因此,使用此代码:
public void checkNullReference(){
ConsumerName name = null;
addReference(name);
System.out.println(name.getConsumerName());
}
调用addReference(name)
后,name
仍将为null
,无论addReference
对其形式参数做了什么
您可以重新设计addReference
以返回ConsumerName
的实例。当您进行此操作时,可以删除参数,因为它被忽略。结果可能是:
public void checkNullReference(){
ConsumerName name = addReference();
System.out.println(name.getConsumerName());
}
public ConsumerName addReference(){
ConsumerName name = new ConsumerName();
name.setConsumerName("KRISHNA");
return name;
}
请记住,java使用按值传递。当你这样做的时候
name = new ConsumerName();
name.setConsumerName("KRISHNA");
它只是简单地创建一个新的本地对象,该对象位于addReference函数堆栈中。因此,一旦函数返回,您就丢失了该对象。换句话说,checkNullReference中的ConsumerName对象与AddReference中的ConsumerName对象不同。您调用的AddReference()方法的输入为null。。没有通过引用进行传递,并且ConsumerName正在使用in addReference()新分配,其作用域将仅保留在方法中。因此,修改代码以返回ConsumerName的新实例
public class Demo {
public void checkNullReference(){
ConsumerName name = null;
name = addReference(name);
System.out.println(name.getConsumerName());
}
public ConsumerName addReference(ConsumerName name){
name = new ConsumerName();
name.setConsumerName("KRISHNA");
return name ;
}
public static void main(String []args){
Demo demo = new Demo();
demo.checkNullReference();
}
}
跟我说:“Java总是按值调用”。这意味着对参数的重新赋值不会影响调用者“传递”的任何变量。如果对null对象调用方法,则会出现null指针异常。
name=new ConsumerName()
创建ConsumerName的对象,但其作用域为方法addRef()
因此,当您尝试在menthod checknullref()中检索它的值时,它会引发空异常。。Java是按值传递的。:-)因为。。。它实际上是一个指针,通过值传递,并且在方法中将值赋给局部变量在该方法之外没有任何作用。是的,@Vamsi描述的方法似乎是正确的方法。我们可以省略一行作为ConsumerName=addReference(name);。我们必须存储该方法返回的引用这对我很有帮助:您正在使用null作为输入调用addReference()方法