关闭

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

标签: Javastring
340人阅读 评论(0) 收藏 举报
分类:
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。


0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:11453次
    • 积分:387
    • 等级:
    • 排名:千里之外
    • 原创:27篇
    • 转载:1篇
    • 译文:0篇
    • 评论:4条
    最新评论