wangzuojia001的博客

努力,努力,努力

String s2 = "abc"; 与 String s3 = new String("abc");原理解析

package testwebapp;


public class Test {

//大家思考一下输出结果是什么?
public static void main(String[] args) {

String s1 = "abc";  
String s2 = "abc";  
String s3 = new String("abc");  
System.out.println(s1 == s2);  
System.out.println(s1 == s3); 
}


}





















首先要知道==的语法。s1、s2、s3是三个不同的对象,大家可能会认为输出都是:false。但运行结果为:true、false。基本类型的变量和对象的引用变量是在函数的栈内存中分配,而堆内存中则存放的是new 出来的对象和数组。在Java虚拟机中还有一块区域叫做常量池。String s1 = "abc"; 的值是存储在常量池中的,当创建引用String s2 = "abc" 的时候,Java虚拟机会优先在常量池中查找是否存在"abc",如果存在则让s2指向这个值,不会重新创建;如果常量池中没有,则创建并添加到常量池中。

所以答案是true 和false。


阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/wangzuojia001/article/details/53996336
文章标签: Java string
个人分类: JAVA
上一篇Java装箱与拆箱与==符的使用
下一篇Eclipse+jdk1.8+tomcat9.0+maven3.3.9配置环境
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭