解答:第一个true,第二个false。String重写了Object中的equals方法,会将string拆分为字符数组,逐个比较各个字符,代码如下:
public boolean equals(Object anObject) {if (this == anObject) {returntrue;}if (anObject instanceof String) {String anotherString = (String)anObject;int n = value.length;if (n == anotherString.value.length) {char v1[] = value;char v2[] = anotherString.value;int i = 0;while (n-- != 0) {if (v1[i] != v2[i])returnfalse;i++;}returntrue;}}returnfalse;}Object中的equests方法如下:public boolean equals(Object obj) {return (this == obj);}
11、输出的结果是什么?
publicclassTest {publicstaticvoidmain(String[] args) {System.err.println(new Test().method1());System.err.println(new Test().method2());}publicintmethod1() {int x = 1;try {return x;} finally {++x;}}publicintmethod2() {int x = 1;try {return x;} finally {return ++x;}}}
解答:第一个返回1,第二个返回2。finally中的代码是一定会被执行的且在try中的代码执行完之后,因此若在其中return返回,会覆盖掉try中的返回值。
如果这样呢?
publicclassTest{publicstaticvoidmain(String[] args){System.err.println(method());}publicstaticbooleanmethod(){try {returntrue;} finally {returnfalse;}}}