码:
String s = "a" + "b" + "c";
我想知道将为该语句创建多少个对象。
字符串池中将有一个字符串对象。在编译时"a" + "b" + "c"
解析为"abc"
(请参阅JLS§15.28),因此您拥有的等效于
String s = "abc";
StringBuilder
与重复的问题的公认答案相反,这里没有涉及。您甚至可以在字节码中看到这一点:
LDC "abc"
ASTORE 1
从上面的JLS链接:
类型的编译时常量表达式
String
始终是“ interned”的,以便使用方法共享唯一的实例String.intern
。
在下面的Java代码中将创建多少对象:
问题内容: 我有以下Java代码: 问题很简单:调用此方法将创建多少个对象? 一开始我回答说创建了5个String对象,但是我的书回答说只有3个对象被创建,没有给出解释(这是一个SCJP问题)。 从我的角度来看,有5个对象:“ Fred”,“ 47”,“ Fred47”,“ ed4”,“ ED4”。 我也在SCJP模拟考试中找到了这个问题,答案是3。 问题答案: “ Fred”和“ 47”将来自字
问题内容: 我有一个类A,其中包含一些私有字段,而同一类扩展了另一个类B,它也具有一些在A类中的私有字段。 B班有一些私人课 现在,当我尝试从上述类A创建JSON字符串时,出现以下异常: 如何解决这个问题? 由于它们是私有字段,所以我猜创建json字符串时应该没有任何问题,但我不确定。 我创建如下的json字符串: 这里obj是A类的对象 问题答案: 由于它们是私有字段,因此在创建json字符串时
我知道,当我们使用下面给出的字符串文本时,字符串对象是在字符串池中创建的(如果它不存在的话)。 在上述情况下,池中只会创建一个字符串对象。 但是,当我们使用new关键字时,它总是在堆内存中创建一个新的String对象(即使String池中有一个) 在这里,我有一个困惑,关于在下面的情况下将创建多少对象,以及在哪里(池或堆内存)。
问题内容: 说我有这个表情 我知道,串池“允许运行时以节省内存在一个池保留不变的字符串” 字符串池 字符串池中将创建多少个字符串? 我最初的猜测是5 -,,,,,因为操作顺序的级联(左到右?),或者是它只是最后的结果,“TomBradyGoat”,存储在字符串池? 问题答案: 在运行时,这段代码将转换为单个对象。编译器将在编译时进行串联,并在常量池中添加一个值。