我有两个课程如下 package com.test;
public class TestObject {
private String id;
private String name;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public void printValues() {
System.out.println("ID = "+id);
System.out.println("Name = "+name);
}
}
和
package com.test;
public class Test {
public void test1() {
TestObject to = new TestObject();
test2(to);
to.printValues();
TestObject to2 = null;
to2 = test2(to2);
to2.printValues();
}
public TestObject test2(TestObject _to) {
if(_to == null) {
_to = new TestObject();
_to.setId("System ID");
_to.setName("System Name : "+new java.util.Date());
} else {
_to = new TestObject();
_to.setId("Some ID");
_to.setName("Some Name : "+new java.util.Date());
}
return _to;
}
public static void main(String[] args) {
Test test = new Test();
test.test1();
}
}
当我运行此代码时,我得到了以下输出
ID = null
Name = null
ID = System ID
Name = System Name : Wed May 07 10:38:22 IST 2014
如果对象为null,那么我不会从函数创建并从函数返回,所以为什么它会给我null?
请帮帮我
提前致谢。
答案 0 :(得分:3)
您正在方法中创建一个新对象,因此您的旧对象未更新,请修改您的代码:
public void test1() {
TestObject to = new TestObject();
to = test2(to); // THIS line, to receive the object you created in test2()
to.printValues();
TestObject to2 = null;
to2 = test2(to2);
to2.printValues();
}
答案 1 :(得分:0)
在test2()函数中,即使对象不为null,也可以创建一个新对象。相反,您可以填充现有对象的字段。 只需更改以下代码:
public TestObject test2(TestObject _to) {
if(_to == null) {
_to = new TestObject();
_to.setId("System ID");
_to.setName("System Name : "+new java.util.Date());
} else {
// _to = new TestObject(); - Not needed as object is not null you can populate existing object
_to.setId("Some ID");
_to.setName("Some Name : "+new java.util.Date());
}
return _to;
}
答案 2 :(得分:0)
Java是按值传递的。如果修改任何从方法签名获得的对象将不会影响原始对象,除非为原始对象分配了修改后的对象。
更新您的代码,如下所示:
TestObject to = new TestObject();
to = test2(to);
to.printValues();
请参阅This