各种猥琐的Java笔试/面试题目的答案(这是我自己测试得出的答案,如有不对的欢迎批评指正)

时间:2022-03-02 14:40:28

各种猥琐的Java笔试/面试题目的答案(这是我自己测试得出的答案,如有不对的欢迎批评指正)

1、运算符优先级问题,下面代码的结果是多少?(笔试)

  1. public class Test {  
  2.     public static void main(String[] args) {  
  3.         int k = 0;  
  4.         int ret = ++k + k++ + ++k + k;  
  5.         // ret的值为多少  
  6.         System.err.println(ret);  
  7.     }  
  8. }  
我运行之后的结果是如下截图,打印出来的是ret=8,k=3

各种猥琐的Java笔试/面试题目的答案(这是我自己测试得出的答案,如有不对的欢迎批评指正)

2、运算符问题,下面代码分别输出什么?(笔试)

  1. package test;  
  2.   
  3. public class Test {  
  4.     public static void main(String[] args) {  
  5.         int i1 = 10, i2 = 10;  
  6.         System.err.println("i1 + i2 = " + i1 + i2);  
  7.         System.err.println("i1 - i2 = " + i1 - i2);  
  8.         System.err.println("i1 * i2 = " + i1 * i2);  
  9.         System.err.println("i1 / i2 = " + i1 / i2);  
  10.     }  
  11. }  
我的答案是: 编译无法通过!这句话 System.out.println("i1 - i2 = " + i1 - i2);是编译无法通过的,首先双引号中的 i1 - i2 = 是一个字符串,这是毋庸置疑的,这个字符串和后面的i1相连接之后,还是一个字符串,再用这个字符串减去i2,这肯定是不行的,i2是一个int类型的整数,字符串减去一个数字那肯定是会报错的。至于其他的3条打印语句,它们会先做运算,然后双引号中的字符串再去和运算完之后的结果相连接起来。如下图所示

各种猥琐的Java笔试/面试题目的答案(这是我自己测试得出的答案,如有不对的欢迎批评指正)

3、下面代码的结果是什么?还是抛出异常?(笔试)

  1. public class Test {  
  2.       
  3.     public void myMethod(String str) {  
  4.         System.err.println("调用string");  
  5.     }  
  6.       
  7.     public void myMethod(Object obj) {  
  8.         System.err.println("调用object");  
  9.     }  
  10.       
  11.     public static void main(String[] args) {  
  12.         Test t = new Test();  
  13.         t.myMethod(null);  
  14.     }  
  15. }  
我的运行结果是打印出了调用string,那我就再多一句嘴吧, 如果把t.myMethod(null);这句话改成 t.myMethod(t);那么就会打印出调用object

各种猥琐的Java笔试/面试题目的答案(这是我自己测试得出的答案,如有不对的欢迎批评指正)


4、假设今天是9月8日,下面代码输出什么?(笔试)

  1. import java.util.Date;  
  2.   
  3. public class Test {  
  4.   
  5.     public static void main(String[] args) {  
  6.         Date date = new Date();  
  7.         System.err.println(date.getMonth() + " " + date.getDate());  
  8.     }  
  9. }  
我自己试了一下这段程序, getMonth()函数和getDate()函数,java中的Date类的这2个函数都画了一横线,表示这2个函数过时了,如下截图

各种猥琐的Java笔试/面试题目的答案(这是我自己测试得出的答案,如有不对的欢迎批评指正)

5、下面代码的输出结果是什么?

  1. public class Test {  
  2.   
  3.     public static void main(String[] args) {  
  4.         double val = 11.5;  
  5.         System.err.println(Math.round(val));  
  6.         System.err.println(Math.floor(val));  
  7.         System.err.println(Math.ceil(val));  
  8.     }  
  9. }  
运行结果如下截图,round(val)函数:val的四舍五入值,floor (val)函数:不大于val的最大整数值,ceil(val)函数:不小于val的最小整数值。
各种猥琐的Java笔试/面试题目的答案(这是我自己测试得出的答案,如有不对的欢迎批评指正)

6、输出的结果是什么?

  1. public class Test {  
  2.   
  3.     public static void main(String[] args) {  
  4.         System.err.println(new Test().method1());  
  5.         System.err.println(new Test().method2());  
  6.     }  
  7.       
  8.     public int method1() {  
  9.         int x = 1;  
  10.         try {  
  11.             return x;  
  12.         } finally {  
  13.             ++x;  
  14.         }  
  15.     }  
  16.       
  17.     public int method2() {  
  18.         int x = 1;  
  19.         try {  
  20.             return x;  
  21.         } finally {  
  22.             return ++x;  
  23.         }  
  24.     }  
  25. }  
我的执行结果如下图

各种猥琐的Java笔试/面试题目的答案(这是我自己测试得出的答案,如有不对的欢迎批评指正)

这样呢?输出什么

  1. public class Test {  
  2.   
  3.     public static void main(String[] args) {  
  4.         System.out.println(method());  
  5.     }  
  6.       
  7.     public static boolean method() {   
  8.          try {   
  9.             return true;   
  10.         } finally {   
  11.           return false;  
  12.         }   
  13.     }  
  14. }  
执行结果如下

各种猥琐的Java笔试/面试题目的答案(这是我自己测试得出的答案,如有不对的欢迎批评指正)

各种猥琐的Java笔试/面试题目的答案(这是我自己测试得出的答案,如有不对的欢迎批评指正)

各种猥琐的Java笔试/面试题目的答案(这是我自己测试得出的答案,如有不对的欢迎批评指正)