java编程思想练习题-第3章练习14-String判等全解

题目:编写一个接受两个字符串参数的方法,用各种布尔值的比较关系来比较这两个字符串,然后把结果打印出来。

解析:有很多种可能,看例子先

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

猜你喜欢

转载自buptchj.iteye.com/blog/2247465