【发布时间】:2015-10-02 09:12:32
【问题描述】:
我开始学习我们从方法返回对象作为结果的部分,我有点卡在这里。如果你们中的任何人能帮助我,我将不胜感激。这是我书中的代码
class Test
{
int a;
Test(int i)
{
a=i;
}
Test increment()
{
Test privremeni = new Test(a+a);
return privremeni;
}
}
public class ReturnObject
{
public static void main(String[] args)
{
Test ob1 = new Test(2);
Test ob2;
ob2 = ob1.increment();
System.out.println("ob1.a: "+ob1.a);
System.out.println("ob2.a: "+ob2.a);
ob2 = ob2.increment();
System.out.println("ob2.a after second increment(): "+ob2.a);
}
}
令人困惑的部分:
首先:Test ob2; 这里我们不创建实际的对象,我们只是将类 Test 的引用分配给对象。在此对象具有值 null 之后。对吧?
第二个:ob2 = ob1.increment();当我们做这部分ob1.increment();然后方法increment()创建一个名为privremeni的新对象并返回对象privremeni的引用并将其分配给ob2?
第三个:ob2 = ob2.increment() 我们再次调用方法increment(),它会再次递增。那么ob2 是否会与我们第一次调用increment() 方法时具有相同的引用,或者当我们再次创建新对象时它将获得新的引用?
我认为我可能无法理解这一点,因为当我们通过值传递引用时,我仍然有一些问题要理解,我认为这部分在这里非常重要。
如果您能给我更多有关此代码的示例以帮助我理解这一点,我将不胜感激。
【问题讨论】:
-
Test ob;在您的代码中不存在,因此很难谈论它。如果它是一个局部变量,它在被赋值之前在逻辑上不会有值。如果是字段,则默认值为 null。请注意,ob在这种情况下不是对象,而是变量。区分对象和变量(以及引用)很重要。 -
第一:yes基本上是对的,检查
ob2 == null时会返回true。第二:您正在创建一个新对象作为increment()方法调用的返回值,所以您在那里也是正确的。第三:每次调用increment()都会返回一个新的Test实例,所以调用前ob2的实例与调用后的ob2是不一样的。它是一个不同的对象,而不仅仅是一个不同的值。
标签: java oop pointers reference