【问题标题】:How do I loop to keep making new object instances of a class?如何循环以继续创建类的新对象实例?
【发布时间】:2018-01-17 15:29:02
【问题描述】:
while (x < 6) {
    x = x-1;
    Dog kfl = new Dog();
}

此循环是否会创建 6 新的不同对象并将它们分配给引用变量 kfl 或 ...?

【问题讨论】:

  • 答案是肯定的......但这是一个糟糕的问题。 stackoverflow.com/help/how-to-ask
  • 欢迎来到 Stackoverflow,请阅读SSCCE
  • x-1?当 x6)或者它将永远运行
  • 有点。它创建了一些新对象,但由于只有一个引用,一旦分配了新对象,每个对象都会“丢失”。所以最后你只有一个可达对象。 (另外我认为你的意思是x=x+1,没有 x 的初始值我能想到会倒计时到 6。)
  • @JuanCarlosMendoza 不是永远,只有在溢出之前...

标签: java loops object


【解决方案1】:

它将创建大约 5 + Integer.MIN_VALUE of Dog 对象。在每次迭代之后,它们之前的对象将有资格被垃圾收集。在 while 循环之后,所有 Dog 对象将不再被引用,因为它将超出范围。

这意味着最终您将不会引用任何已创建的Dog 对象。

编辑:我把 x 当作x=5。因为它必须是 &lt; 6 才能满足 while 约束。

【讨论】:

  • 其实这取决于x的初始值(没有给出)。如果x的初始值为Integer.MIN_VALUE,则只会创建一个对象然后退出。
  • 实际上,它要么精确地创建 0,要么创建无限......(而 x
  • @JasonVanBenschoten 不会是infinite,因为x的值最终会下溢变成Integer.MAX_VALUE
  • @JasonVanBenschoten 你觉得怎么样? Integer.MIN_VALUE减一,就变成Integer.MAX_VALUE,至少大于6。
  • 好吧,所以无限不是正确的词......但是......它明白了这一点。
【解决方案2】:

对象的创建取决于x 的值。如果x 的值小于 6,那么它将创建无限数量的对象。另一种情况,如果x的值大于6,则循环不会执行,所以对象数为0。

【讨论】:

  • 你能不能至少给你的帖子加点注释?
  • 很高兴你能解释为什么他的代码不能达到预期的结果。你应该解释一个可能的解决方案。
【解决方案3】:

这取决于 x 是什么。此外,按照您设置循环的方式,如果 x 从小于 6 开始,它将无限运行,如果 x 从 6 或更高开始,则不执行。

假设int x = 0;

while (x < 6) {
    x = x-1;

应该被替换为

int x = 6;
while (x > 0) {
    x--;

或者

int x = 0;
while (x < 6) {
    x++;

当您定义实例kfl 时,您正在创建新对象,但它们都被分配给同一个变量,因此您正在重写它们。 如果要分配具有相似变量的实例,一个好方法是将它们分配给一个数组,并为数组的每个元素定义一个新实例。例如,

Dog dogs[] = new Array[5]; // Sets array to 5 elements total

for (int i = 0; i < dogs.length; i++) {
    dogs[i] = new Dog();
}

这里使用 for 循环而不是 while 循环的原因是 for 循环旨在用于迭代。 While 循环旨在用作连续条件 - 就像 if 语句一样,除了不断重复。因此,当您不知道代码块应该迭代多少次时,您将使用while 循环,而当您知道多少次时,您将使用for 循环。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-06-18
    • 1970-01-01
    • 2014-06-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多