我的问题是关于java中的字符串池。
案例1:
StringBuilder sb = new StringBuilder();
sb.append("First");
sb.append("Two");
sb.append("Three");
sb.append("Four");案例2:
StringBuilder sb = new StringBuilder();
sb.append("First"+"Second"+"Three"+"Four");执行上述两种情况后,string池中会有多少个string对象?(注:假设string池在每个case之前都有0个对象)。
我的assumptions=>
在第一种情况下:
字符串池在第一个案例结束时将有4个字符串对象。多么?说明:字符串"First“将被创建,它将被添加到字符串池中& sb将被修改。然后将创建另一个字符串对象"Two“,并将其保存在字符串池中& sb将被修改。以同样的方式,在第一种情况结束时,字符串池将有4个string对象。
在第二种情况下:字符串池将有7个字符串对象。多么?说明:字符串"First“和"Two”将在池中创建,然后由于我们将"First“和"Two”连接在一起,第三个字符串对象"FirstSecond“将在字符串池中创建。同样,在第二种情况结束时,字符串池将有7个对象。
如果我错了,请纠正我。
发布于 2017-03-12 19:22:37
你错了。在第一个示例中,池中有四个字符串文字,它们不是在运行时创建的,而是在编译时创建的,并在类初始化时添加到池中。第二个示例在池中有一个字符串文字,因为连接是一个常量表达式,编译器计算它并将其作为单个文字嵌入字节码中。
在运行时求值的更一般情况下,当它不是常量表达式时,仍然不会得到七个字符串。例如,在
String foo = getPrefix() + getName() +“foo”+ getSuffix();
您将四个字符串连接为一个字符串,总共为五个字符串,不一定是interned。不是七个,因为一行字符串连接是作为StringBuilder#append调用实现的,并且没有中间字符串实例,只有结尾的结果实例。
https://stackoverflow.com/questions/42746594
复制相似问题