这两种到底什么区别
String str1="***";和String str1=new String("***");到底是什么区别?
正在回答 回答被采纳积分+1
同学你好~~
第一种是直接赋值,第二种String new他们的区别:
new 出来的字符串地址值不同存储在堆中,而String a = "ABC"; 直接引用的存储在栈中,会去常量池中找,找到了就直接引用,找不到的话就重新创建一个再引用,如果还有String b= "ABC"; ,则还是直接引用的常量池中a创建的那个。而new的话,每次new都会创建一个新的对象, 对于相等的字符串,在常量池中永远只有一份,在堆中有多份.
什么意思呢比如:
String str1 = new String("ABC");
String str2 = new String("ABC");
str1 == str2 的值是True 还是False呢? False.
String str3 = "ABC";
String str4 = "ABC";
String str5 = "A" + "BC";
str3 == str4 的值是True 还是False呢? True.
str3 == str5 的值是True 还是False呢? True.
在写代码的时候,一般不要 String str2 = new String("ABC");
String a = "ABC";
String b="AB";
String c=b+"C";
System.out.println(a==c); false
a和b都是字符串常量所以在编译期就被确定了!
而c中有个b是引用不是字符串常量所以不会在编译期确定。
而String是final的!所以在b+"c"的时候实际上是新创建了一个对象,然后在把新创建对象的引用传给c.
如果解决了你的疑惑,请采纳,祝学习愉快~~
- 参与学习 人
- 提交作业 7317 份
- 解答问题 14452 个
想要入门学编程?多年一直活跃在编程语言排行版前列的Java是一个很好的选择。本路径将从Java基础语法、面向对象、常用工具类三部分,为你开启软件开发的大门!
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星