【问题标题】:How many objects are created in this case? [duplicate]在这种情况下创建了多少个对象? [复制]
【发布时间】:2017-03-02 13:14:42
【问题描述】:

标题说明了一切

String a;
String b = new String("Hello");

我见过很多这样的问题,但没有一个问题的字符串尚未启动。

有人可以帮助我吗?

谢谢。

【问题讨论】:

  • 没有。 “我见过很多这样的问题,但没有一个问题的字符串尚未启动。”
  • 只有一个,在String a中它只是声明了一个String类型的变量a
  • @Ssiro 询问声明变量是否会创建任何Object,答案显然是否定的,它只是一个没有任何目标的引用
  • 太棒了,谢谢。这就是我需要知道的。你们中的一个可以“回答”这个问题,以便我可以宣布它已解决吗?

标签: java string object


【解决方案1】:

您正在创建由变量 b 引用的单个对象,a 是一个声明的变量,没有分配任何数据,这不是 Java 意义上的对象

【讨论】:

  • 确切地说:b 不是对象,它是引用 new String() 的引用。
  • 是的,但是在执行之后,你可以称它为对象b,虽然我的措辞可能会让人困惑
  • 调用b 一个对象会导致各种混乱。 b = null; 是否删除对象?不,它不会清除引用 - 对象可能仍然活着并且很好。
  • 是的,我同意,很抱歉造成混乱,尽管该对象可能会被 gc 活着切碎
【解决方案2】:

第一行只声明一个字符串变量,但不创建对象。在第二行中,使用new 关键字创建了一个字符串对象。

所以只创建了一个对象。

【讨论】:

    【解决方案3】:

    这是来自OCA Java SE 7 Programmer I Certification Guide: Prepare for the 1ZO-803 exam的解释:

    当您使用关键字 operator new 时,一个对象会出现。 您可以使用此对象初始化引用变量。请注意声明变量和初始化变量之间的区别。以下是一个 Person 类和另一个 ObjectLifeCycle 类的示例:

    class Person {}
    class ObjectLifeCycle {
        Person person;
    }
    

    在前面的代码中,没有在类 ObjectLife-Cycle 中创建类 Person 的对象;它只声明了一个 Person 类型的变量。初始化引用变量时会创建一个对象:

    class ObjectLifeCycle2 {
        Person person = new Person();
    }
    

    从句法上讲,对象是通过使用 new 运算符而产生的。因为 也可以使用 = 运算符初始化字符串,以下代码是创建字符串对象的有效示例

    class ObjectLifeCycle3 {
        String obj1 = new String("eJava");
        String obj2 = "Guru";
    }
    

    【讨论】:

      猜你喜欢
      • 2021-09-16
      • 1970-01-01
      • 2023-03-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多