Java中String直接赋字符串和new String的区别 时间:602次浏览2018.06.29提问 已解决问题hao231知道平台可亲可爱的大鹏网友在602次浏览2018.06.29提问提了关于IT技术Java编程相关的问题,他的提问有没有Java中String直接赋字符串和new String的区别IT技术Java编程希望大家能够帮助她。 详细问题描述及疑问:期待您的答案,你是我的宝贝,你是我的花,谢谢你对我的帮助! 第1个回答 雪糕在不在2019.07.15回答首先我们要了解1.常量池(constantpool)指的是在编译期被确定,并被保存在已编译的.class文件中的一些数据。它包括了关于类、方法、接口等中的常量,也包括字符串常量Strings0=”kiovo”;Strings1=”kiovo”;Strings2=”ki”+“ovo”;System.out.println(s0==s1);System.out.println(s0==s2);两个结果都是true;上面的这种形式都是直接从常量池中获取的所以他们的位置都是相同的2.用newString()创建的字符串不是常量,不能在编译期就确定,所以newString()创建的字符串不放入常量池中,它们有自己的地址空间。所以new出来的与上面这种并不相同Strings0=”kiovo”;Strings1=newString(”kiovo”);Strings2=”ki”+newString(“ovo”);System.out.println(s0==s1);System.out.println(s0==s2);System.out.println(s1==s2);falsefalsefalses1因为无法在编译期确定s2的后半段也是所以s1s2都是新创建的字符串 第2个回答 匿名用户2019.07.12回答首先可以进行一下比较Stringa="abc";Stringaa=newString("abc");System.out.println(a==aa);输出的是false。在这里,我们先不谈堆,也不谈栈,只引入常量池这个简单的概念。常量池指的是在编译期被确定,并被保存在已编译的.class文件中的一些数据。它包括了关于类、接口、方法等等中的常量,也包括字符串常量,例Stringa="abc"。而newString()是申明一个新的空字符串,注意是空字符串不是null,并且不是常量不放入常量池中,它们有自己的地址空间。