赞
踩
对于使用“==”进行比较,不仅需要两个字符串的值本身是相同的,同时要求两个字符串是同一个对象。下面我们从Java中来仔细看。
public static void main(String[] args) { String a = "hello world"; String b = "hello world"; String c = "hello " + "world"; String d = "hello "; String e = "world"; String f = d + e; if (a == b) { System.out.println("true"); } else { System.out.println("false"); } if (a == c) { System.out.println("true"); } else { System.out.println("false"); } if (a == f) { System.out.println("true"); } else { System.out.println("false"); } }
true
true
false
上面代码的运行结果如上所示。
注意到上面的字符串a 字符串b 字符串c都是相同的一个对象,对于Java而言,只是将不同的引用指向相同的静态字符串,即都是同一个对象,所以使用"=="判断结果为true。
对于f而言,虽然字符串的值与字符串a 字符串b 字符串c的值相等,但是是通过新建的其他对象生成的,因此使用 "= ="结果为false。这里需要注意一下。
可能大家对于字符串a 字符串b 字符串c 与字符串f的区别还是比较明显的,因为f是新建的另一个对象;但是对于字符串a 字符串b 与 字符串c可能就存在一点问题,因为字符c是通过字符串相加获得的,这里需要主要,即使字符串相加也是静态变量,因此字符串a 字符串b 字符串c指向的是同一个对象。
只关注两个字符串的值是否相等,不关注是不是同一个对象
public static void main(String[] args) { String a = "hello world"; String b = "hello world"; String c = "hello " + "world"; String d = "hello "; String e = "world"; String f = d + e; if (a.equals(b)) { System.out.println("true"); } else { System.out.println("false"); } if (a.equals(c)) { System.out.println("true"); } else { System.out.println("false"); } if (a.equals(f)) { System.out.println("true"); } else { System.out.println("false"); } String i = new String("你好"); String j = new String("你好"); // i和j是两个不同的对象 if (i.equals(j)) { System.out.println("true"); } else { System.out.println("false"); } }
true
true
true
true
理解上面说的使用"=="判断,这里就很清楚了吧。String.equals()只比较两个对象的值是否相等。
用于 字符串与对象进行比较 或者 按字典顺序比较两个字符串
这里我们看一个按字典顺序比较两个字符串:
public static void main(String[] args) {
String a = "hello world";
String b = "hello f world";
System.out.println(a.compareTo(b));
}
17
输出结果17
返回值是整型,它是比较对应字符的大小(ASCLL码顺序),如果第一个字符和参数的第一个字符不等,结束比较,返回他们之间的长度差值,如果第一个字符和参数的第一个字符相等,则以第二个字符和参数的第二个字符做比较,以此类推,直至比较的字符或被比较的字符有一方结束。
如果参数字符串等于此字符串,则返回值0;
如果此字符串小于字符串参数,则返回一个小于0的值;
如果此字符串大于字符串参数,则返回一个大于0的值。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。