0
  1. 即使零是唯一引用它的变量,保存值“dog”的 String 对象是否仍被视为已实习?

    String zero = "dog";
    
  2. 这段代码中有多少个对象?要么是 1,因为实习对象忽略范围,要么是 2,因为范围仍然适用。

    String jack = "skellington";
    
    for(//stuff)
    {
    String sally = "skellington";
    }
    
4

2 回答 2

2

字符串文字总是被实习的,即为它们创建池。如果在贴标一个字符串文字后,该字符串在该 JVM 实例的任何地方都被引用,则只能从池中挑选

1)将创建一个对象。不管它是否被引用

2)将创建一个对象

请参阅http://docs.oracle.com/javase/1.5.0/docs/api/java/lang/String.html上的实习生方法

于 2013-04-05T17:21:30.900 回答
1

这段代码中有多少个对象?要么是 1,因为实习对象忽略范围,要么是 2,因为范围仍然适用。

由于 java 在给定应用程序的 Stringpool 中实习了 String 字面量,因此只会为您的代码创建一个对象。查看Java 语言规范中指定的字符串文字。它说明了有关字符串文字的以下几点:

  • 同一包 (§7) 中同一类 (§8) 中的文字字符串表示对同一 String 对象 (§4.3.1) 的引用。

  • 同一包中不同类中的文字字符串表示对同一 String 对象的引用。

  • 不同包中不同类中的文字字符串同样表示对同一 String 对象的引用。

  • 由常量表达式(第 15.28 节)计算的字符串在编译时计算,然后将其视为文字。

  • 在运行时通过连接计算的字符串是新创建的,因此是不同的。

  • 显式实习计算字符串的结果是与任何具有相同内容的预先存在的文字字符串相同的字符串。

于 2013-04-05T17:23:05.290 回答