我是靠谱客的博主 纯真台灯,最近开发中收集的这篇文章主要介绍浅谈String str = ““ 和 new String()的区别1 创建的字符串变量在内存中的区别2 String类的特性3 两个方面经典面试题-String s = new String('abc')请问有几个String对象?分别是String st=“abc”;和String st=new String(“abc”)的区别,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

java存在一个常量池,可以用来存储字符串常量。!

1 创建的字符串变量在内存中的区别

两者看似都是创建了一个字符串对象,但在内存中确是各有各的想法。

String str1= “abc”; 在编译期,JVM会去常量池来查找是否存在“abc”,如果不存在,就在常量池中开辟一个空间来存储“abc”;如果存在,就不用新开辟空间。然后在栈内存中开辟一个名字为str1的空间,来存储“abc”在常量池中的地址值。

String str2 = new String("abc") ;在编译阶段JVM先去常量池中查找是否存在“abc”,如果过不存在,则在常量池中开辟一个空间存储“abc”。在运行时期,通过String类的构造器在堆内存中new了一个空间,然后将String池中的“abc”复制一份存放到该堆空间中,在栈中开辟名字为str2的空间,存放堆中new出来的这个String对象的地址值。

        
也就是说,前者在初始化的时候可能创建了一个对象,也可能一个对象也没有创建;后者因为new关键字,至少在内存中创建了一个对象,也有可能是两个对象。

2 String类的特性

String类 是final修饰的,不可以被继承

String类的底层是基于char数组的。

3 两个方面

1)性能效率

String类被设计成不可变(immutable)类,所以它的所有对象都是不可变对象。例如:

String str = “hello";

str = str + "world“;

所以当上文str指向了一个String对象(内容为“hello”),然后对str进行“+”操作,str原来指向的对象并没有变,而是str又指向了另外一个对象(“hello world”),原来的对象还在内存中。

由此也可以看出,频繁的对String对象进行修改,会造成很大的内存开销。此时应该用StringBuffer或StringBuilder来代替String。

而new String()更加不适合,因为每一次创建对象都会调用构造器在堆中产生新的对象,性能低下且内存更加浪费。

2)安全性

对象都是只读的,所以多线程并发访问也不会有任何问题。

由于不可变,用来存储数据也是极为安全的。

经典面试题-String s = new String('abc')请问有几个String对象?分别是

两个或一个,“xyz”对应一个对象,这个对象放在字符串常量缓冲区,常量“xyz”不管出现多少遍,都是缓冲区中的那一个。如果以前就用过‘xyz’直接从缓冲区拿。如果没有就在字符串缓冲区创建这个“xyz”字符串对象,new String()每写一遍,就创建一个新的对象。

String st=“abc”;和String st=new String(“abc”)的区别

String st=“abc”;和String st=new String(“abc”)的区别
比如
String st1=“abc”;
String st2=“abc”;
st1==st2 是true

String st1=new String(“abc”)
String st2=new String(“abc”)
st1==st2 是false

最后

以上就是纯真台灯为你收集整理的浅谈String str = ““ 和 new String()的区别1 创建的字符串变量在内存中的区别2 String类的特性3 两个方面经典面试题-String s = new String('abc')请问有几个String对象?分别是String st=“abc”;和String st=new String(“abc”)的区别的全部内容,希望文章能够帮你解决浅谈String str = ““ 和 new String()的区别1 创建的字符串变量在内存中的区别2 String类的特性3 两个方面经典面试题-String s = new String('abc')请问有几个String对象?分别是String st=“abc”;和String st=new String(“abc”)的区别所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(48)

评论列表共有 0 条评论

立即
投稿
返回
顶部