题目:编写一个接受两个字符串参数的方法,用各种布尔值的比较关系来比较这两个字符串,然后把结果打印出来。
解析:有很多种可能,看例子先
import java.util.*; public class test { static void f(boolean b) {if(b == true) System.out.println(true); else System.out.println(false);} static void stringTest(String s, String t) { f(s == t); f(s.equals(t)); f(t.equals(s)); } public static void main(String[] args) { String s = "one", t = "two"; test.stringTest(s, t); System.out.println("-------------------------"); String s1 = "one", t1 = "one"; test.stringTest(s1, t1); System.out.println("-------------------------"); String s3 = new String("one"), t3 =new String("one"); test.stringTest(s3, t3); System.out.println("-------------------------"); String s2 = "one", t2 = s2; test.stringTest(s2, t2); System.out.println("-------------------------"); } }
结果是这样的:
false false false ------------------------- true true true ------------------------- false true true ------------------------- true true true -------------------------
第一栏三个false很好理解,因为他们表示的内容都不一样当然不相同。
第二栏为什么是三个true呢?虽然我们没有显式的把这两个变量用=连接起来,但是编译器为了节约存储,把表示相同字符串的变量指向了同一块内存区域,也就是说这一个字符串在内存中只保存了一次。
第三栏我们用new来强制编译器分配内存,所以会出现有false有true因为==比较的是引用是否相同,而equals比较的是字面量是否相同(String类重写)
第四栏因为引用相同所以不管是equals和==都输出true