Java面试题: 10道java易错题目


1. 前言

不论你是职场新人还是步入职场N年的职场新人大哥大当然这个N<3,我能担保你答不对这十个题不要问我为什么这么自信,这些个题还是“有水平”的javase的基础题,传闻小白指定鸭蛋分,一测一个准,哈哈。

作为将来要成为架构师的男人,对,你没看错,就是在说你 皮一下很开森 ,what?你是小白?我顶你个肺,我叫声杠精,你敢应吗,那个代号9527的杠精,说你呢快快来答题,看你能答对几道题。

2. 题一

下面的程序有问题吗?如果有问题说明一下, 如果没有问题猜测一下运行结果

public static void main(String[] args){ short s = 1; s=s+1; System.out.println(s); } 

分析:s = s + 1计算结果被提升为int类型,再向short类型赋值时发生错误,因为不能将取值范围 大的类型赋值到取值范围小的类型,所以这个程序会报错编译失败。

3. 题二

下面的程序有问题吗?如果有问题说明一下, 如果没有问题猜测一下运行结果

public static void main(String[] args){ short s = 1; s+=1; System.out.println(s); } 

分析: s += 1 逻辑上看作是 s = s + 1 计算结果被提升为int类型,再向short类型赋值时发生错误,因为不能将取值范围 大的类型赋值到取值范围小的类型。但是, s=s+1进行两次运算 , += 是一个运算符,只运算一次,并带有强制转换的特点, 也就是说 s += 1 就是 s = (short)(s + 1) ,因此程序没有问题编译通过,运行结果是2.

4. 题三

下面的程序有问题吗?如果有问题说明一下, 如果没有问题猜测一下运行结果

public static void main(String[] args){ byte b1=1; byte b2=2; byte b3=1 + 2; byte b4=b2 + b3; System.out.println(b3); System.out.println(b4); } 

分析: b3 = 1 + 2 , 1 和 2 是常量,为固定不变的数据,在编译的时候(编译器javac),已经确定了 1+2 的结果并没 有超过byte类型的取值范围,可以赋值给变量 b3 ,因此 b3=1 + 2 是正确的。 反之, b4 = b2 + b3 , b2 和 b3 是变量,变量的值是可能变化的,在编译的时候,编译器javac不确定b2+b3的结果是什 么,因此会将结果以int类型进行处理,所以int类型不能赋值给byte类型,因此编译失败。

5. 题四

下面的程序有问题吗?如果有问题说明一下, 如果没有问题猜测一下运行结果

public static void main(String[] args){ short s = 32767; s = (short)(s + 10); System.out.println(s); } 

分析:定义s为short范围内最大值 (2^15) - 1 = 32767,运算后,强制转换(int换为short),砍掉2个字节后会出现不确定的结果,因为这个值以及超出了short类型数据的范围,从而变成负数结果-32759

6. 题五

下面的程序有问题吗?如果有问题说明一下, 如果没有问题猜测一下运行结果

public static void main(String[] args) { int a=0; for (int i = 0; i >= a && i<100 ; i++){ a+=i; } System.out.println(a); } 

分析:这个稍微没有任何细节以及“套路”,只是单纯的掺杂着些逻辑,所以段个点debug吧,感受一下吧,结果是6

7. 题六

下面的程序有问题吗?如果有问题说明一下, 如果没有问题猜测一下运行结果

public static void main(String[] args) { int x=4; System.out.println("value  is  " + ((x>4) ? 99.9 : 9)); } 

分析:这个题我估计99%的会错 包括我自己 ,如果我没猜错的话你的结果是9,啥?你的结果是99.9,额这个,如果这位同学你不是杠精那我建议你回家种田吧,我和你一起,你锄地我耕田...呃呃呃那结果是什么呢,结果居然是9.0 。。。至于原因我还是不断定的哈哈没有仔细去专研过,如果必须要个结果我估计java把9这个整数默认当成浮点类型数据,我当然只是推论,那么知道的大佬就请评论出来吧。

8. 题七

下面的程序有问题吗?如果有问题说明一下, 如果没有问题猜测一下运行结果

public static void main(String[] args) { //对于下面两句代码是否编译出错,很基础的哦 double d=3.10; float f=3.10; //对于下面两句代码是否编译出错,以及打印结果是多少 float a = 12345678.90123456789f; double b=0.12345678901234567890; float c=0.12345678901234567890f; System.out.println(a); System.out.println(b); System.out.println(c); } 

分析:3.10是浮点型,浮点型字面值默认当做double类型来处理,直接编译通过;如果是float类型则必须加 F或者f,若没加,直接编译不通过,会报错“损失精度”,至于解决方法也很简单, 第一种方式:强制类型转换float f1=(float)3.10; 第二种方式:没有类型转换直接加F或者f,如 folat f2=3.10f ;对于abc的打印结果a = 1.2345679E7、b = 0.12345678901234568、c = 0.12345679

如果还不懂java浮点类型float以及double,可以参考这篇文章

9. 题八

分析下列程序代码,猜想下输出结果。

public static void main(String[] args) { int a = 1; int b = 2; System.out.println(a); System.out.println(b); change(a, b); System.out.println(a); System.out.println(b); } public static void change(int a, int b) { a = a + b; b = b + a; } 

分析下列程序代码,猜想下输出结果。

public static void main(String[] args) { int[] arr = {1,3,5}; System.out.println(arr[0]); change(arr); System.out.println(arr[0]); } public static void change(int[] arr) { arr[0] = 200; } 

10. 题九

运行结果是怎样的呢?

public static void main(String[] args) { int i = 1, j = ++i; System.out.println(i); System.out.println(j); } 

分析:估计各位会觉得i=1,j=2,噗哈哈,你还太单纯了,啥?你的答案是i=1,j=1?回家种田吧兄嘚我陪你。那么结果是什么呢?i=2,j=2,原因也很简单,i其实是个变量,j也是个变量,之前i值是1,之后j经历了++i,就这个经历的同时,i已经自增++了,所以也是2.

11. 题十

这个题主要考察多态知识,涉及到向上转型和向下转型的概念,所以是比较偏难的!

package Polymorphic; //爷爷类 class Ye { public String show(Sun obj) { return ("Ye and Sun"); } public String show(Ye obj) { return ("Ye and Ye"); } } //爸爸类 class Fu extends Ye { public String show(Fu obj) { return ("Fu and Fu"); } public String show(Ye obj) { return ("Fu and Ye"); } } //儿子类 class Zi extends Fu { } //孙子类 class Sun extends Fu { } public class PolymorphicTest { public static void main(String[] args) { Ye y = new Ye(); Ye y2 = new Fu(); //向上 Fu f = new Fu(); Zi z = new Zi(); Sun s = new Sun(); System.out.println("第一题 " + y.show(f)); System.out.println("第二题 " + y.show(z)); System.out.println("第三题 " + y.show(s)); System.out.println("第四题 " + y2.show(f)); //到这里挂了??? System.out.println("第五题 " + y2.show(z)); System.out.println("第六题 " + y2.show(s)); System.out.println("第七题 " + f.show(f)); System.out.println("第八题 " + f.show(z)); System.out.println("第九题 " + f.show(s)); } } 

运行结果

第一题 Ye and Ye
第二题 Ye and Ye
第三题 Ye and Sun
第四题 Fu and Ye
第五题 Fu and Ye
第六题 Ye and Sun
第七题 Fu and Fu
第八题 Fu and Fu
第九题 Ye and Sun


#Java面经##Java##笔试题目##面经##求面经##后端开发##技术栈#
全部评论
更多java面试题不懂的可以问我哦
点赞 回复 分享
发布于 2022-05-26 20:43

相关推荐

10-07 20:48
门头沟学院 Java
听说改名就会有offer:可能是实习上着班想到后面还要回学校给导师做牛马,看着身边都是21-25的年纪,突然emo了了
点赞 评论 收藏
分享
重生2012之我是java程序员:换个稍微正式点的照片吧
点赞 评论 收藏
分享
1 4 评论
分享
牛客网
牛客企业服务