Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java中字符串常量池中的对象_Java_Scjp_Ocpjp - Fatal编程技术网

java中字符串常量池中的对象

java中字符串常量池中的对象,java,scjp,ocpjp,Java,Scjp,Ocpjp,在上述程序中创建了多少个对象?转换成大写字符串后,我看到了4个对象,但根据scjp手册,答案是3。我不明白为什么只有3个物体是3个物体 public class NewClass { public String makinStrings() { String s = "Fred"; s = s + "47"; s = s.substring(2, 5); s = s.toUpperCase(); retur

在上述程序中创建了多少个对象?转换成大写字符串后,我看到了4个对象,但根据scjp手册,答案是3。我不明白为什么只有3个物体

是3个物体

public class NewClass {

    public String makinStrings() {
        String s = "Fred";
        s = s + "47";
        s = s.substring(2, 5);
        s = s.toUpperCase();
        return s.toString();
    }
}
如果看到
substring()
toUpperCase()
的源代码,它将返回一个新字符串和
s+“47”
由于
s
的值是在运行时确定的,因此它将创建新字符串,因此总共有3个对象

  • s=“Fred”
  • s=s+47=>
    s=Fred47
  • s=s子串(2,5)=>
    s=ed4
  • s=s.toUpperCase()=>
    s=ED4

  • 请参考此处750个“此代码创建了多少字符串”问题中的任意一个。他们中的一些人对所发生的事情有非常透彻的描述,我们最不需要的就是另一个了。@realponsignist,我的观点是正确的。有人能解释一下投票失败的原因吗?我说错话了吗?对不起,我不得不删除它作为回答,因为我投了反对票,这让我觉得可能是你的回答错了。是的,即使是我也希望人们发表评论,而不是在我已经接受它作为一种选择的情况下仅仅否决投票answer@Aniket:我想出了同样的方法,总共有4个对象,但答案是只创建了3个对象,而您发布了相同的内容
        String s = "Fred";             // created in pool
        s = s + "47";                  // created in heap
        s = s.substring(2, 5);         // created in heap
        s = s.toUpperCase();           // created in heap