题目:编写一个接受两个字符串参数的方法,用各种布尔值的比较关系来比较这两个字符串,然后把结果打印出来。
解析:有很多种可能,看例子先
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