Object Comparison - AP CS A 考点总结 ⑤


 

在AP CS A Exam中,关于对象(object)之间的比较,大家需要掌握三种比较方式。

 

我们先来看前两种:即,object identity(==、!=) 和 object equality(equals)

 

我们在比较两个数值是否相等的时候,可以使用 == 和 !=,比如:

 

System.out.println( 1 != 2);

 

显示结果为true。

 

但是,当我们在进行object之间的比较的时候,就不能简单地使用 == 和 !=了。比如:

 

String str1 = “SAT”;

String str2 = “小帮手”;

String str3 = “SAT小帮手”;

System.out.println((str1 + str2) == str3);

 

显示结果为false。为什么会这样呢?原因在于,== 和 != 比较的是两个引用型(reference type)变量内所存储的引用(reference),而不是比较其所存储的对象(object)。当然,有的时候,如果你使用 == 和 != 来比较两个对象,也会达到你想要的效果,但是在Java和AP CS A考试中,千万别这么做!

 

那么,如果我们想要比较两个object是不是一样,我们应该怎么做呢?答案是调用一个方法,equals。我们可以将前面的代码修改如下:

 

String str1 = “SAT”;

String str2 = “小帮手”;

String str3 = “SAT小帮手”;

System.out.println((str1 + str2).equals(str3));

 

这样显示结果就是我们想要的true了。不知道大家有没有看过老艺术家赵本山先生和老艺术家宋丹丹女士表演的一个小品,里面有一句经典的台词——“脱了马甲我也认识你!”这里的equals方法,比较的就是穿着不同马甲的两个objects,虽然马甲不同,但“内核”一样。

 

在AP CS A的考试中,equals会被用来比较两个字符串是否一样,当然,我们需要比较的不是它们的马甲(reference),而是它们的“内核”。

 

 

第三种比较方式,是专门用于字符串(String)之间的比较的另外一个method:compareTo

 

前面我们说到的equals也可以用来比较两个字符串,它的返回值是true或false;但是compareTo的返回值不是boolean值,而是一个int型数值,即返回一个整数。如果调用compareTo之后的返回值是0,则代表这两个字符串完全一样,比如:

 

String str = “SAT小帮手”;

System.out.println(str.compareTo(“SAT小帮手”));

 

显示结果就是0。

 

如果调用compareTo之后的显示结果不为0,那就代表这两个字符串不完全一样。比如:

 

System.out.println(“A”.compareTo(“B”));

 

显示结果就是-1,因为compareTo比较的是两个字符串的每个字符在UNICODE中对应的数字,“A”在“B”的前面一个,所以返回值就是-1。如果调用System.out.println(“B”.compareTo(“A”)); 结果就是1了。因为大小写在UNICODE中的编码也不一样,所以compareTo是区分大小写的(case-sensitive)。

 

最后,大家可以考虑一下以下代码的显示值应该是哪个整数:

 

System.out.println(“SIT”.compareTo(“SAT”));

 

 

如果有任何问题,欢迎来找小起子聊天。

 

---------

👉AP Computer Science A 考前刷题精讲班:

上课时间:2018年4月14日(周六)、15日(周日)、21日(周六)、22日(周日)

                  09:00-11:00

上课方式:网络直播课,可回看

课时:每次2小时,总计8小时

费用:2400元(参加过AP CS A 课程的老学员8折优惠)

适合学员:有AP CS A课程基础,准备2018年5月份参加AP考试的同学。

讲题范围:2013年至2017年一共5年的Free Response Questions,共计18道大题。

增值服务:给所有报名学员提供两套小帮手原创AP CS A模考选择题,并提供答疑服务。

更多AP课程