Java中比较两个字符串时:
若用的是“==”,则比较的是两个字符串的内存地址是否相等,使用如 "string1 == string2";
若用的是“equals”,则比较的是两个字符串的内容是否相等,使用如 "string1.equals(string2)"。
compareTo字符串函数比较的结果有下面三种情况:
(1) 大于0,表示string1字符串大于string2;
(2) 等于0,表示string1字符串等于string2;
(3) 小于0,表示string1字符串小于string2,
使用如 "n = string1.compareTo(string2)"。
一个实例:
public class Solution {
public static void main(String[] args) {
String string1 = new String("iPod");
String string2 = new String("iTouch");
String string3 = new String("iPod");
String string4 = "iPod";
String string5 = "iPod";
//string1 和 string2
if(string1 == string2)
System.out.println("string1与string2内存地址相等!");
else
System.out.println("string1与string2内存地址不相等!");
if(string1.equals(string2))
System.out.println("string1与string2内容相等!");
else
System.out.println("string1与string2内容不相等!");
//string1 和 string3
if(string1 == string3)
System.out.println("string1与string3内存地址相等!");
else
System.out.println("string1与string3内存地址不相等!");
if(string1.equals(string3))
System.out.println("string1与string3内容相等!");
else
System.out.println("string1与string3内容不相等!");
//string1 和 string4
if(string1 == string4)
System.out.println("string1与string4内存地址相等!");
else
System.out.println("string1与string4内存地址不相等!");
if(string1.equals(string4))
System.out.println("string1与string4内容相等!");
else
System.out.println("string1与string4内容不相等!");
//string4 和 string5
if(string4 == string5)
System.out.println("string4与string5内存地址相等!");
else
System.out.println("string4与string5内存地址不相等!");
if(string4.equals(string5))
System.out.println("string4与string5内容相等!");
else
System.out.println("string4与string5内容不相等!");
}
}
/**
* 运行结果:
* string1与string2内存地址不相等!
* string1与string2内容不相等!
* string1与string3内存地址不相等!
* string1与string3内容相等!
* string1与string4内存地址不相等!
* string1与string4内容相等!
* string4与string5内存地址相等!
* string4与string5内容相等!
*/
特别注意上述运行结果中“string4与string5的内存地址和内容都相等”,这是因为在Java中,String为字符串常量时,由相同序列的字符组成的两个字符串属于同一对象,位于内存中的同一个位置。每个字符串常量只有一个 String 对象来表示,即使这个字符串常量出现在一个程序的不同位置甚至一个程序的不同程序包中。
若String string1 = "hello",而String string2 = "hell" + "o"时,两者依旧指向同一字符序列,即同一对象。("hell"+"o",两个常量字符串相加后,创建了一个新的字符串常量,这个工作是编译期间完成的)
推荐的博客:Java常量字符串String理解