java 不要使用==运算符测试字符串的相等性,String常量池问题

public static strictfp void main(String[] args) {
		
		/*
		 * 如果虚拟机始终将相同的字符串共享 , 就可以使用 == 运算符检测是否相等。 但实际上只有字符串常量是共享的
		 * 而 + 或 substring等操作产生的结果并不是共享的。 因此 , 千万不要使甩 == 运算符测试字符串的相等性
		 */
		
		String str = "a";
		System.out.println(str=="a");//true
		
		str = str+"b";
		System.out.println(str);//ab
		System.out.println(str=="ab");//false
		System.out.println("ab".equals(str));//true
	}

声明变量时候,如果右边都是常量的情况: 

public class Demo002 {

	public static void main(String[] args) {
		 String s3 = "a"+"b"+"c";
		 System.out.println(s3=="abc");//true 

		 
		 s3 = s3+"d";
		 System.out.println(s3=="abcd");//false
		 
		 
		 String s4 = s3+"e";
		 System.out.println(s4=="abcde");//false

	}

}

  编译的class文件,通过该class可以发现 String s3 = "a"+"b"+"c";被编译成 String s3 = "abc";所以该"abc"是共享的,存在于常量    池。

public class Demo002
{
  public static void main(String[] args)
  {
    String s3 = "abc";
    System.out.println(s3 == "abc");

    s3 = s3 + "d";
    System.out.println(s3 == "abcd");

    String s4 = s3 + "e";
    System.out.println(s4 == "abcde");
  }
}

 

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值