Java中的String字符串类,可以用来存储字符串。那么定义两个字符串类如何进行比较呢?

1. 用 ==

假如是基本数据类型的对象用==进行比较是很有效的,因为比较的就是数值。而对于引用数据类型的话,比较的却是地址。

这就是下面三个比较输出boolean值不同的原因之一。

public class StringTest {
	
	public static void main(String[]args) {
		String string01 = "csdnyyds";
		String string02 = "csdnyyds"; 
		System.out.println(string01 == string02); //true
		
		String string11 = "csdnyyds";
		String string12 = new String("csdnyyds");
		System.out.println(string11 == string12); //false
		
		String string21 = new String("csdnyyds");
		String string22 = new String("csdnyyds");
		System.out.println(string21 == string22); //false
		
	}
}

输出结果为:

String比较Java java 比较string_System

另外,因为字符串是常量,直接初始化的话,字符串引用会指向堆中字符串常量池里的字符串对象,如果新初始化的值在字符串常量里有,就不会重新创建一个,会指向同一个对象。而new出来的对象指向的是堆里的某个字符串对象。

下图表示的上述代码部分的对象

String比较Java java 比较string_字符串比较_02

如果两个比较的字符串对象指向的是同一个字符串对象,那么就可以是true,否则为false。

在对两个字符串比较中,"=="不推荐使用,很容易使得出的值和理想值不同。

2.用equals方法。

从Object类继承下来的equals和hashCode方法,String类覆盖重写了。所以只需要两个字符串字面量相等使用equals方法比较就可以返回boolean值 true。当然,字面量相等的话,hashCode的值也相等。 相对与==推荐使用此方法进行两个字符串比较。

public static void main(String[]args) {
		String string01 = "csdnyyds";
		String string02 = "csdnyyds";
		System.out.println(string01.equals(string02)); //返回true

		String string11 = "csdnyyds";
		String string12 = new String("csdnyyds");
		System.out.println(string11.equals(string12)); //返回true
		
		String string21 = new String("csdnyyds");
		String string22 = new String("csdnyyds");
		System.out.println(string21.equals(string22)); //返回true
	
	
	}

运行结果:

String比较Java java 比较string_字符串比较_03

3.用compareTo方法

前面两种都是返回boolean值,使用compareTo方法进行两个字符串比较的话就是返回int类型的值。通过返回值可以粗略的判断哪个字符串"大"。从左到右以此比较字符串。如何判定谁大谁小遵循Unidecode编码集所对应的数字。 

String类定义的compareTo方法:

String比较Java java 比较string_字符串比较_04

String类之所以有这个方法是因为String类实现了Comparable接口,并且重写了其中的compareTo()方法。你也可以自己定义一个类实现Comparable接口然后重写compareTo()方法

public class StringTest1 {

	
	public static void main(String[]args) {
		String string01 = "1csdnyyds";
		String string02 = "2csdnyyds";
		System.out.println(string01.compareTo(string02)); //返回-1

		String string11 = "1csdnyyds";
		String string12 = new String("1csdnyyds");
		System.out.println(string11.compareTo(string12)); //返回0
		
		String string21 = new String("2csdnyyds");
		String string22 = new String("1csdnyyds");
		System.out.println(string21.compareTo(string22)); //返回1
	
	
	}
}

输出结果:

String比较Java java 比较string_String比较Java_05

出现了不同的数字。例如str1.compareTo(str2)。str1>str2就会返回一个正数,str1=str2就会返回0,str1<str2就会返回一个负数。

总结:两个字符串比较可以选择返回boolean类型的equals方法,具有粗略判断大小返回数值的compareTo方法。尽量不要使用==。