1、运算符优先级问题,下面代码的结果是多少?
publicclassTest {publicstaticvoidmain(String[] args){int k = 0;int ret = ++k + k++ + ++k + k;// ret的值为多少System.err.println(ret);}}
解答:主要考察++i和i++的区别。++在前则先自增再赋值运算,++在后则先赋值再自增运算。因此,结果为8。
2、运算符问题,下面代码分别输出什么?
publicclass Test {public static void main(String[] args) {int i1 = 10, i2 = 10;System.err.println("i1 + i2 = " + i1 + i2);System.err.println("i1 - i2 = " + i1 - i2);System.err.println("i1 * i2 = " + i1 * i2);System.err.println("i1 / i2 = " + i1 / i2);}}
解答:主要考察两点,运算符的优先级、字符串与数字中的+为连接符号。
第一条中,都是相加,则从前到后的顺序运算,字符串与数字相加,连接为一个字符串,再与后面的数字相加,再次连接为字符串,因此结果为“i1 + i2 = 1010”。
第二条编译错误,字符串无法与数字用减号连接。
第三条、第四条中乘除的优先级高,会先运算,而后再与字符串连接,因此结果分别为:“i1 * i2 = 100”、“i1 * i2 = 1”。
3、下面代码的结果是什么?
publicclassTest {publicvoidmyMethod(String str) {System.err.println("string");}publicvoidmyMethod(Object obj) {System.err.println("object");}publicstaticvoidmain(String[] args) {Test t = new Test();t.myMethod(null);}}