java字符串拼接原理

我们先来看一段代码:


public class Main {
    public static void main(String[] args) {
          String str1 = "Hello";
          String str2 = "World";
          String str3 = "HelloWorld";
          String str4 = str1 + str2; 
          Systme.out.println(str3 == str4);
    }
}

 str3 == str4  返回的是false!

为什么两个字符串内容相等而不相等呢?

首先 == 比较的是字符串的地址。


字符串用加号+进行字符的拼接其实就是利用StringBuilder类里的append()方法,将每一个字符串添加进去,再返回一个StringBuilder对象,所以可以不用对象去接收返回值,直接链式编程得到最终添加的结果,再用里面的toString()方法将其再转换为字符串。

以下是字符串相加+的逻辑代码:

String str1 = "111111";
 
String str2 = "222222";
 
StringBuilder sb = new StringBuilder();
 
sb.append(str1);
 
sb.append(str2);
 
String str = sb.toString();  //得到了一个新的字符串常量,新的地址引用。
 
System.out.println(str);

所以二者的对象引用不同,自然地址也不同,所以比较为不相同,返回false。

注意这与以下代码不一样,最直接的创建字符串对象,内容一样那么地址也一样。

间接使得字符串内容的一样的方法,所获取的新字符串地址与要比较字符串的地址不一样。


以下是另外一种内容一样比较结果为false的情况:

public class Main {
    public static void main(String[] args) {
        String s1 = "hello";
        String s2 = "HELLO".toLowerCase();
        System.out.println(s1 == s2);
     
    }
}

但实际上那只是Java编译器在编译期,会自动把所有相同的字符串当作一个对象放入常量池,自然s1和s2的引用就是相同的。

此时两个字符串都属于常量池,但字符串的引用地址都不同,所以 str3  == str4 才会返回false。

但是利用equals()方法可以比较两个字符串的内容是否相等,所以建议使用这个来比较字符串的内容。

public class Main {
    public static void main(String[] args) {
        String s1 = "hello";
        String s2 = "HELLO".toLowerCase();
        System.out.println(s1.equals(s2));  //打印结果为true
    }
}

 以上就是讲解了字符串拼接原理和比较的两种方法——内容比较、地址比较。

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值