oopscooper level
获赞
29
粉丝
2
关注
0
看过 TA
11
电子科技大学
2020
Java
IP属地:未知
勤奋刻苦、热爱钻研!
私信
关注
2015-08-25 20:59
已编辑
电子科技大学 Java
我还是想问个问题:String  a=“hello”,这种情况下,“hello”在编译期间就存储在jvm的方法区的常量池中;String aa=new string(“hello”),这种情况下的“hello”也是在编译期间就存储在常量池中了吗?还是在堆上分配空间呢?
oopscooper:代码不会骗人,这是我写的测试程序,答案不是你说的。 public class TestJava { static String s1="hello"; String s2=new String("hello"); String s3=new String("hello"); public static void main(String[] args) { TestJava aa=new TestJava(); aa.match(); } public void match(){ System.out.println(s1==s2); System.out.println(s2==s3); } } 结果是:false,false。 说明:不管常量池中是否有“hello”这个字符串,每次new String()这种方式创建String类型变量时,都会在堆中创建一个String类型的“hello”,所以s1和s2,s3的值都是不同的,并且s2和s3也是不同的。
0 点赞 评论 收藏
分享
关注他的用户也关注了:
牛客网
牛客企业服务