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

原创 2017年01月03日 17:29:11
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。


版权声明:本文为博主原创文章,未经博主允许不得转载。

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

package testwebapp; public class Test { //大家思考一下输出结果是什么? public static void main(String[] a...
  • wangzuojia001
  • wangzuojia001
  • 2017年01月03日 17:29
  • 490

String s1="abc"; s2="abc" s3= new String("abc")为啥s1和s2的地址值一样而s1和s3的就不一样呢?

先是在内存里创建了一个abc字符串,然后s1指向abc,s2要指向abc,内存中已经有abc,所以s1和s2地址相同,s3指向的是新字符串abc的地址,所以s1与s3不同,s1==s2但s1!=s3,...
  • hongtashan11
  • hongtashan11
  • 2011年04月28日 15:53
  • 1122

String s1 = new String("abc"); String s2 = ("abc");

String s1 = "abc"; String s2 = "abc"; System.out.println(s1==s2);             //true System.out.prin...
  • singit
  • singit
  • 2016年03月02日 13:50
  • 711

String s1 = new String("abc")和String s2 = "abc"的区别

今天在看JVM的时候突然想到这样一个问题,即String s1 = new String("abc"); String s2 = "abc";System.out.println(s1 == s2);...
  • zdavb
  • zdavb
  • 2016年07月18日 22:50
  • 3101

new String("abc")与String a="abc"的区别

知识点:在JAVA虚拟机(JVM)中存在着一个字符串池,其中保存着很多String对象,并且可以被共享使用,因此它提高了效率, 由于String类是final的,它的值一经创建就不可改变,因此我们不用...
  • u012693072
  • u012693072
  • 2013年12月21日 21:15
  • 1264

String str="abc" 与 String str = new String("abc");详解

1.java运行环境有一个字符串池,由String类维护,执行语句String str="abc"时:                                                ...
  • renyuanchunby
  • renyuanchunby
  • 2011年11月17日 10:24
  • 7178

String str = new String("abc")和String str = "abc"区别

两者的内存分配:String是一个特殊的包装类数据,可以用: String str = new String(“abc”); String str = “abc”; 两种形式来创建,第一种是用n...
  • IWantToHitRen
  • IWantToHitRen
  • 2015年09月09日 15:41
  • 1827

String str1="abc";和String str2=new String("abc");的区别

 http://tech.techweb.com.cn/viewthread.php?tid=525631 String str1="abc";和String str2=new S...
  • u012572538
  • u012572538
  • 2014年01月08日 12:56
  • 1293

String str="abc" 与 String str = new String("abc")

1.java运行环境有一个字符串池,由String类维护,执行语句String str="abc"时: 1.首先查看字符串池中是否存在字符串"abc",如果存在则直接将“abc”赋给str,如果...
  • sddchina
  • sddchina
  • 2015年04月06日 11:40
  • 1232

Stringstr=new String("abc") 这行代码究竟创建了几个对象?

Stringstr=new String("abc");   紧接着这段代码之后的往往是这个问题,那就是这行代码究竟创建了几个String对象呢? 相信大家对这道题并不陌生,答案也是众所周知的,2个...
  • stanxl
  • stanxl
  • 2015年01月03日 10:32
  • 3990
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:String s2 = "abc"; 与 String s3 = new String("abc");原理解析
举报原因:
原因补充:

(最多只允许输入30个字)