我从Child对象得到的Toy对象怎么会和通过构造函数传入的不一样呢?

问题描述 投票:0回答:1

我正在做一项作业,要求我创建代码,使其运行时不会出现错误或失败。这只是一个测试用例:

Toy t1 = new Toy(1000121, "Red Bike", 3, 98.90);
Toy t2 = new Toy(1000123, "Colouring Book", 4, 19.89);
Toy t3 = new Toy(1000128, "Skateboard", 5, 149.99);
Toy t4 = new Toy(1000127, "SpongeBob DVD", 3, 14.99);
Toy t5 = new Toy(1000130, "Bike Helmet", 1, 18.99);
Toy t6 = new Toy(1000125, "Toy car", 10, 3.99);
Toy t7 = new Toy(1000129, "Ball", 2, 5.59);
Toy t8 = new Toy(1000189, "Teddy Bear", 3, 10.79);

Toy[] listofToy1 = { t1, t2 };

Child c1 = new Child("James", 1, listofToy1);

assertTrue(c1.getChildToy().length == 2 && c1.getChildToy()[0] != t1 && c1.getChildToy()[1] != t2);
assertTrue(c1.getChildToy().length == 2 && c1.getChildToy()[0].getToyName().equals("Red Bike") && c1.getChildToy()[1].getToyName().equals("Colouring Book"));

assertTrue(c1.getChildToy().length == 2 && c1.getChildToy()[0].getToyQuantity() == 3 && c1.getChildToy()[1].getToyQuantity() == 4);

我的问题是第一个assertTrue是如何工作的?我是不是错过了什么?

您可以通过其名称来推断每个方法的含义。作为参考,

getChildToy
方法将返回 Toy 对象的数组。玩具对象来自第 1-8 行创建的玩具

对我来说,看起来

Child c1
是用一系列玩具创建的,其中分别包含索引 0 和 1 中的
t1
t2
。那么,从第一个断言来看,
c1.getChildToy()[0]
怎么会不等于
t1
呢?

如果

c1.getChildToy()[0]
不等于
t1
,第二个断言中的
c1.getChildToy()[0].getToyName().equals("Red Bike")
怎么可能为真?

任何帮助将不胜感激,谢谢。

编辑:我尝试了system.out.println。

System.out.println(c1.getChildToy()[0].getToyInformation());
System.out.println(c1.getChildToy()[1].getToyInformation());

控制台显示:

(1000121, "Red Bike", 3, 98.90)
(1000123, "Colouring Book", 4, 19.89)

与第 1 行和第 2 行匹配

附注getToyInformation 方法只是将玩具对象中的信息放入格式化字符串中

java arrays methods assert testcase
1个回答
2
投票

您似乎认为

==
表示“相同内容”。

事实并非如此。这意味着“相同的参考”。

该方法正在测试的是

Child
构造函数接受其玩具输入(第三个参数)并克隆每个玩具对象

想象我盖一座房子。

然后我在隔壁建造了完全相同的房子。相同的布局。墙壁漆成同样的颜色。我什至把它们装饰得一模一样。

他们是同一所房子吗?不。但是,它们是相同的设计。

house1 == house2
是假的,因为不是同一所房子。

不过,

house1.equals(house2)
是真的。

我们可以在java中简单地看到这一点:

String a = "Hello".toLowerCase();
System b = "Hello".toLowerCase();
System.out.println(a == b); // false
System.out.println(a.equals(b)); // true

我们在这里制作了 2 根弦。然而,它们恰好具有相同的内容。它们就像两栋一模一样的房子。

请注意,这里的整个设置(数组、可变对象、防御性克隆)已经过时了 20 年的代码风格,我不知道这是什么课程或教程,但是,oof。它非常过时了。

© www.soinside.com 2019 - 2024. All rights reserved.