String字符串比较

tech2025-01-30  19

比较String字符串

比较String字符串时候注意看是用什么去创建的字符串   注意:字符串对象之间的比较不用“==” 用equals方法

  1.字面量创建(如果是字面量创建,那么可以用==,但还是建议用equals方法比较)

package com.bjpowernode.javase.string; public class StringTest02 { public static void main(String[] args) { String s1 = "hello"; String s2 = "hello"; System.out.println(s1 == s2); // true // == 双等号比较的是变量中保存的内存地址 // 对于s2来说,因为在执行s1时候已经创建了hello所以"hello"是存储在方法区的字符串常量池当中 // 所以这个"hello"此时不会新建。(因为这个对象已经存在了!)

   

   

2.new关键字创建(必须用equals)

public class StringTest02 { public static void main(String[] args) { String s1 = "hello"; String s2 = "hello"; System.out.println(s1 == s2); // true String x = new String("xyz"); String y = new String("xyz"); // == 双等号比较的是变量中保存的内存地址 System.out.println(x == y); //false

  所以字符串对象之间的比较不能使用“==”,应该调用String类的equals方法

但是注意在调用时候出现的空指针异常  

// "=="不保险。应该调用String类的equals方法。 // String类已经重写了equals方法,以下的equals方法调用的是String重写之后的equals方法。 System.out.println(x.equals(y)); // true String k = new String("testString"); //String k = null;当k为空时候去使用下面两个写法(注意区分写法) // "testString"这个字符串可以后面加"."吗? // 因为"testString"是一个String字符串对象。只要是对象都能调用方法。 //有两个写法,注意区分写法 //第一种 System.out.println("testString".equals(k)); // 建议使用这种方式,因为这个可以避免空指针异常(把为空的引用写在后面,写前面就是表示null去调用,一个空的去调用会出现空指针异常) //第二种 System.out.println(k.equals("testString")); // 存在空指针异常的风险。不建议这样写。 } } //当然,如果String k = null不为空的话,这两个都不存在风险

   

在讲字符串比较前,必须要了解 == 与equals的区别:   因为java所有类都继承于Object基类,而Object中equals用来实现,所以equals与双等号是一样的,都是比较对象地址,   java api里的类大部分都重写了equals方法,包括基本数据类型的封装类、String类等。   对于String类==比较的是两个String对象的地址,equals则用于比较两个String对象的内容(值)

最新回复(0)