== 与 equals()

== 与 equals()

问题:在 Java 中,为什么不用 == 而用 equals() 比较字符串呢?

Java 中,String 属于引用数据类型。对字符串对象的比较,不能简单地使用比较运算符“==”,因为比较运算符比较的是两个字符串的地址是否相同。即使两个字符串对象的内容相同,只要它们引用的不是同一内容,使用比较运算符依旧会返回false。

例子:

 		String s1 = "test";
        String s2 = "test";
        String s3 = s1;                   
        String s4 = new String("test");
        String s5 = new String("test");

		System.out.println("s1 == s2 : "+(s1 == s2));
        System.out.println("s2 == s3 : "+(s2 == s3));
        System.out.println("s4 == s5 : "+(s4 == s5));
        System.out.println("s4.equals(s5) : "+s4.equals(s5));

结果
== 与 equals()
分析
1、s1,s2和s3使用比较运算符返回true,因为它们引用的是同一公共池中的同一对象;当遇到字符串常量时,编译器会使用该值创建一个 String 对象,而s1, s2, s3 引用的是同一个字符串常量,所以它们的引用地址及引用对象的值都完全相同。
2、s4和s5使用比较运算符返回false,因为它们引用的是不同的对象; s4 和 s5都是使用new 时分别创建了两个字符串对象,虽然字符串的内容相同,但是它们的引用地址是不同的。

对于equals() 的使用需要注意
当字符串对象为 null 时,调用 equals() 方法会抛空指针异常

 	  String test1 = null;
      String test2 = new String("test");
      boolean result = test1.equals(test2);

== 与 equals()
这就要求在使用equals() 方法需要先判断对象是否为空

	  String test1 = null;
      String test2 = new String("test");
      
      if(testStr1 != null){
         boolean result = test1.equals(test2);
      }

扩展
忽略大小写的情况下比较两个字符串是否相等时,可以用.equalsIgnoreCase()方法。

	  String test1 = new String("abcdefg");
      String test2 = new String("ABCDEFG");
      if(test2 != null){
          System.out.println("test1.equalsIgnoreCase(test2) : "+test1.equalsIgnoreCase(test2));
      }

== 与 equals()

上一篇:MySQL存储过程权限分析


下一篇:linux中删除目录中指定文件外的其他文件