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

Stringstr = str和String str =  new String(str)的区别

String str1 = “str1”:

1、 在栈中创建str1的引用。

2、 去常量池中查看是否有相同Unicode编码的字符串常量。如果有将str1指向该常量,如果没有则创建一个内容为”str1”的字符串常量,将str1的引用指向该常量。

3、 如果str1进行了赋值str1= “123”,则栈中的str1的引用指向新的内容为“123”的字符串常量。

4、 String str1 = “str1”; String str2 = “str1”;str2的引用指向常量池中已经存在的内容为“str1”的常量,不会重新创建新的常量,str1和str2的引用指向同一个常量。

str1 == str2; str1+”a” != str2+”a”;

String str1 = new String(“str1”):

1、 在常量池中创建内容为“str1”的对象,在堆中创建内容为“str1”的对象。

2、 String str1 = new String(“str1”); String str2 = new String(“str1”);str2不会指向之前创建的对象,而是重新创建一个对象。

str1 != str2;

代码如下:

        String str1 = "str1";
        String str2 = "str1";
        String str3 = new String("str1");
        String str4 = new String("str1");
        System.out.println(str1==str2);//true地址一样
        System.out.println(str3==str4);//false,但地址不一样
        System.out.println(str3.equals(str4));//true,值一样
        System.out.println(str2.equals(str3));//true,值一样
        System.out.println((str1+"a")==(str2+"a"));//false;进行了+连接地址不一样
        System.out.println((str1+"a").equals((str2+"a")));//true;进行了+连接值一样

  • 4
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值