Java中String str = new String(“abc”);创建了几个对象?

发布时间:2024-12-03 17:27

在阅读时配乐:巴赫的《Air on G String》 #生活乐趣# #生活分享# #音乐推荐#

最新推荐文章于 2024-09-13 20:13:42 发布

魅影骑士0050 于 2017-10-16 17:11:09 发布

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

面试中,遇到这个问题,知道是abc和new String()两个对象,但是记不清底层原理是怎么回事了,所以,事后总结一下。

String s = new String("abc");
首先我们要明白两个概念,引用变量和对象,对象一般通过new在堆中创建,s只是一个引用变量。

所有的字符串都是String对象,由于字符串文字的大量使用,java中为了节省时间,在编译阶段,会把字符串放在常量池中,常量池的一个好处就是可以把相同的字符串合并,占用一个空间,我们可以用==判断一下两个引用变量是否指向了一个地址即一个对象。

1.Java中的‘==’:

1)如果是8种基本类型,==返回的是true;

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

String s1 ="abc";

String s2 = "abc" ;

System.out.println(s1==s2);

2)如果是引用类型,==比较的是两个变量是否指向同一个内存。

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

String s1 = new String("abc") ;

String s2 = new String("abc") ;

System.out.println(s1==s2);

2.String s = new String("abc")实际上是"abc"本身就是常量池中的一个对象,在运行 new String()时,把常量池即pool中的字符串"abc"复制到堆中,并把这个对象的应用交给s,所以创建了两个String对象,一个在pool中,一个在堆中。下面看这个程序,创建了几个对象。

public class Demo03 {      public static void main(String[] args) {                    String s1 = new String("abc") ;          String s2 = new String("abc") ;          if( s1 == s2 ){          System.out.println("在堆中创建了一个对象");        }          else{          System.out.println("在堆中创建了两个对象");              }          }  }  

public class Demo03 {

public static void main(String[] args) {

String s1 = new String("abc") ;

String s2 = new String("abc") ;

if( s1 == s2 ){

System.out.println("在堆中创建了一个对象");

}

else{

System.out.println("在堆中创建了两个对象");

}

}

}

可知在堆中创建了两个对象,但是在文字池中有一个对象,所以共创建了三个对象

网址:Java中String str = new String(“abc”);创建了几个对象? https://www.yuejiaxmz.com/news/view/362392

相关内容

经典String str = new String(“abc”)创建了几个对象?(转)
经典String str = new String(“abc”);内存分配问题
Java——String类
String a = “123”; String b = “123”; a==b 吗?为什么??
String a = new String(new char[] { 'a', 'b', 'c', 'd' });
String, new String 及 String.valueOf() 关于 == 的判定
String类的equals方法和==方法的比较
【Java数据结构】字符串常量池
String的比较,“==”比较,equals()比较
《 Thinking in Java 》第五章 初始化与清理

随便看看