在内存运行时中创建了多少个对象?

时间:2016-02-19 21:10:48

标签: java oop

我正在学习1z0-803 Java证书考试。我们必须找出,在此应用程序中创建了多少cell.colourIndicatorLabel.backgroundColor = UIColor(red: CGFloat(red), green: CGFloat(green), blue: CGFloat(blue), alpha: CGFloat(brightness)) 个实例:

MarkList

我的一位朋友说,在这个问题中答案是两个对象。我认为它只有一个(public class MarkList { int num; public static void graceMarks(MarkList obj4) { obj4.num += 10; } public static void main(String[] args) { MarkList obj1 = new MarkList(); MarkList obj2 = obj1; obj2.num = 60; graceMarks(obj2); } } ),虽然我可能错了,因为我是Java新手,但有一些C#经验。

3 个答案:

答案 0 :(得分:9)

答案是一个对象。 MarkList obj1 = new MarkList();创建了一个新的MarkList对象,MarkList obj2 = obj1;只创建了对obj1的引用,因此两者都指向完全相同的对象。 所有其他代码只是样板文件,不会创建对象。

答案 1 :(得分:7)

只创建了一个 MarkList实例。

要了解创建了多少个对象,可以使用此过程:

  • 搜索构造函数的任何调用(看起来像new MarkList(...))。您可以使用像eclipse这样的IDE来查找所有引用
  • 检查包含构造函数的代码被调用的频率(可能在循环内部或在多次调用的方法内部)。
  • 将曾经创建的对象放入不同的变量,或将它们从一个方法移交给另一个方法将不会创建其他实例=>不相干

但是创建了数千个其他实例(在我的Oracle JDK 1.8中)。

  • MarkList.class已创建
  • String[] args已创建
  • MarkList obj1已创建
  • 创建了许多运行时对象(如Thread.currentThread()

使用分析器,运行代码并计算对象。但请记住,结果将完全取决于您的JVM实现。

VisualVM profiling results

答案 2 :(得分:0)

忘了这个问题。如果您在线随机搜索,此考试题有错字。许多网站都提到了obj3,但它并不存在。您的朋友可能会从包含拼写错误的来源中读取。