Java计算类高频面试题及详细答案(实战版)_第1页
Java计算类高频面试题及详细答案(实战版)_第2页
Java计算类高频面试题及详细答案(实战版)_第3页
Java计算类高频面试题及详细答案(实战版)_第4页
Java计算类高频面试题及详细答案(实战版)_第5页
已阅读5页,还剩2页未读, 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Java计算类高频面试题及详细答案(实战版)本套题目为一线互联网、外包、传统软件公司Java面试高频计算题,涵盖基础数据类型运算、位运算、进制转换、精度丢失、自增运算、大数运算等核心考点,答案为手写实战解析,贴合面试答题思路,无书面化套话。一、基础运算与类型转换计算题题目1:分析以下代码输出结果,说明原因java

publicclassTest{

publicstaticvoidmain(String[]args){

inta=10;

doubleb=2.5;

System.out.println(a/b);

System.out.println(5/2);

System.out.println(5.0/2);

}

}答案与解析:输出结果:4.0、2、2.5核心原理:Java运算遵循类型自动提升规则1、int和double混合运算时,int会自动提升为double类型,最终结果为浮点型,10/2.5=4.0;2、两个整数相除,属于整数运算,结果只保留整数位,直接舍去小数,5/2=2;3、运算中存在浮点数,整数自动提升为浮点数,执行浮点除法,结果为2.5。题目2:自增运算符混合运算,写出输出结果java

publicclassTest{

publicstaticvoidmain(String[]args){

inti=1;

intres=i+++++i;

System.out.println(res);

System.out.println(i);

}

}答案与解析:输出结果:4、3自增核心规则:后置先取值后自增,前置先自增后取值1、i++:先取出i当前值1参与运算,运算结束后i自增为2;2、++i:i先自增1变为3,再取出3参与运算;3、整体运算:1+3=4,最终i的值为3。题目3:byte类型运算报错问题,分析代码结果java

publicclassTest{

publicstaticvoidmain(String[]args){

byteb1=10;

byteb2=20;

byteb3=b1+b2;

System.out.println(b3);

}

}答案与解析:代码编译报错,报错原因:不兼容的类型,从int转换到byte可能会有损失底层原理:Java中所有数值型变量运算时,会自动提升为int类型1、b1和b2为byte类型,相加时自动提升为int,运算结果也是int类型;2、int类型数值无法直接赋值给byte类型变量,需要强制转换;3、修正写法:byteb3=(byte)(b1+b2);,修正后输出30。二、浮点精度丢失计算题(面试高频)题目4:写出以下代码输出结果,并解释精度丢失原因java

publicclassTest{

publicstaticvoidmain(String[]args){

System.out.println(0.1+0.2);

System.out.println(0.1+0.2==0.3);

}

}答案与解析:输出结果:0.30000000000000004、false核心原因:Java的float、double遵循IEEE754浮点数标准,二进制无法精准表示部分十进制小数。1、十进制0.1和0.2转换成二进制是无限循环小数,存储时会进行舍入近似存储;2、两个近似值相加后,误差叠加,结果不等于精准的0.3;3、业务解决方式:涉及金额、精准小数计算,使用BigDecimal,禁止直接用double/float运算和比较。题目5:BigDecimal运算踩坑题,分析输出结果java

importjava.math.BigDecimal;

publicclassTest{

publicstaticvoidmain(String[]args){

BigDecimalb1=newBigDecimal(0.1);

BigDecimalb2=newBigDecimal(0.2);

System.out.println(b1.add(b2));

}

}答案与解析:输出结果:0.3000000000000000444089209850062616169452667236328125踩坑点:禁止使用double参数的BigDecimal构造方法1、传入double值时,double本身已经存在精度丢失,后续BigDecimal运算只会延续误差;2、正确写法:使用字符串构造器newBigDecimal("0.1"),可精准运算。三、位运算计算题(笔试必考)题目6:计算位运算结果&、|、^、<<、>>java

publicclassTest{

publicstaticvoidmain(String[]args){

inta=3;//二进制11

intb=5;//二进制101

System.out.println(a&b);

System.out.println(a|b);

System.out.println(a^b);

System.out.println(a<<2);

System.out.println(b>>1);

}

}答案与解析:输出结果:1、7、6、12、2运算规则(先统一二进制位数):3=011,5=1011、与运算&:两位同为1才为1,其余为0→001=1;2、或运算|:两位有1即为1→111=7;3、异或^:两位不同为1,相同为0→110=6;4、左移<<:整体左移n位,低位补0,等价乘以2的n次方→3*4=12;5、右移>>:整体右移n位,高位补符号位,等价除以2的n次方取整→5/2=2。题目7:写出2&-2的运算结果(经典面试题)答案与解析:结果:2核心:Java中整数以补码形式存储和运算1、正数补码=原码:2的补码00000000000000000000000000000010;2、负数补码=反码+1:-2原码10000000...0010,反码11111111...1101,补码11111111...1110;3、两者与运算,仅第二位同为1,结果为2;拓展:该运算常用于获取二进制最右侧的1,是算法高频用法。四、进制转换计算题题目8:手动计算进制转换1、十进制100转二进制、十六进制;2、二进制110101转十进制;答案与解析:1、十进制100转换:二进制:1100100,十六进制:0x64;2、二进制110101转十进制:计算:1*2⁵+1*2⁴+0*2³+1*2²+0*2¹+1*2⁰=32+16+4+1=53。五、短路与、短路或运算计算题题目9:分析代码输出,说明短路特性java

publicclassTest{

publicstaticvoidmain(String[]args){

inta=5;

if((a++>10)&&(a++<20)){

System.out.println("成立");

}

System.out.println(a);

intb=5;

if((b++>10)||(b++<20)){

System.out.println("成立");

}

System.out.println(b);

}

}答案与解析:输出结果:6、成立、7短路核心规则:1、短路与&&:前条件为false,直接短路,不执行后条件;a初始5,a++>10为false,后续a++不执行,a只自增1次,结果为6;2、短路或||:前条件为true,直接短路,前条件为false,继续执行后条件;b初始5,b++>10为false,继续执行后条件b++<20,b自增两次,结果为7,条件成立。六、综合压轴计算题题目10:写出完整输出结果java

publicclassTest{

publicstaticvoidmain(String[]args){

intnum=3;

num+=num*2;

System.out.println(num);

intx=10;

x=x+(x+

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论