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

下载本文档

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

文档简介

Java运算高频面试题及详细答案(实战版)本套题目精选企业面试高频Java运算题型,覆盖基础运算符、自增运算、位运算、浮点精度、短路运算、运算优先级、类型转换等核心考点,答案贴合实际开发逻辑,通俗易懂,无冗余话术。一、基础运算符与类型运算面试题1、面试题:byte、short、char类型数值相加,结果是什么类型?为什么?答案:结果统一为int类型。详细解析:Java虚拟机存在整型提升规则:在进行算术运算时,byte、short、char这三种低于int的基本数据类型,会自动转换为int类型后再参与计算,最终运算结果也是int类型。这是因为JVM底层没有专门针对byte、short、char的运算指令,所有整数运算都基于int执行。代码示例:java

bytea=10;

byteb=20;

//bytec=a+b;//编译报错,a+b结果是int类型

intc=a+b;//正确2、面试题:int和long运算、float和double运算,结果分别是什么类型?答案:1、int与long运算:结果为long类型;2、float与double运算:结果为double类型;3、整数与浮点数混合运算:结果为浮点类型。详细解析:Java运算遵循类型自动提升原则:运算中容量小、精度低的类型,会自动转换为容量大、精度高的类型,保证数据不丢失。类型容量排序:byte<short<int<long<float<double二、自增自减高频面试题(重中之重)3、面试题:请说出i++和++i的区别,并写出以下代码运行结果java

inti=10;

inta=i++;

intb=++i;

System.out.println(a);

System.out.println(b);

System.out.println(i);答案:运行结果依次为:10、12、12详细解析:1、后置自增i++:先赋值、后自增。先将变量当前值返回参与运算,运算结束后变量自身+1。本例中:a=i++,先把10赋值给a,之后i变为11。2、前置自增++i:先自增、后赋值。变量自身先+1,再将新值返回参与运算。本例中:++i让i从11变为12,再把12赋值给b。最终a=10,b=12,i=12。4、面试题:分析以下经典自增代码的运行结果,说明原理java

intnum=1;

num=num++;

System.out.println(num);答案:输出结果为1详细解析:这是面试高频坑点,核心是后置自增的执行顺序:1、num++会先开辟临时空间,存储num的原始值1;2、然后num自身完成自增,num变为2;3、最后执行赋值操作,将临时空间的原始值1赋值给num,覆盖掉自增后的2;所以最终num的值仍为1。三、短路与、短路或运算面试题5、面试题:&和&&的区别?|和||的区别?答案及详细解析:1、&(逻辑与/位与)、&&(短路与)-&是非短路运算:无论左侧表达式结果是true还是false,右侧表达式一定会执行;既可以做逻辑运算,也可以做位运算。-&&是短路运算:左侧为false时,直接判定整体结果为false,右侧表达式不执行,效率更高,开发中逻辑判断优先使用。2、|(逻辑或/位或)、||(短路或)-|是非短路运算:左侧无论true/false,右侧必执行;可做逻辑、位运算。-||是短路运算:左侧为true时,直接判定整体结果为true,右侧不执行。6、面试题:写出以下代码运行结果java

intx=5;

booleanflag1=(x++<3)&(x++<10);

System.out.println(x);

inty=5;

booleanflag2=(y++<3)&&(y++<10);

System.out.println(y);答案:输出结果依次为:7、6详细解析:1、第一组&运算:x初始5,x++<3先判断5<3为false,x自增为6;&无短路,继续执行右侧x++<10,x再次自增为7,最终x=7。2、第二组&&运算:y初始5,y++<3判断为false,y自增为6;&&触发短路,右侧代码不执行,最终y=6。四、浮点运算精度面试题(超级高频)7、面试题:为什么0.1+0.2!=0.3?Java中如何解决浮点精度丢失问题?答案:0.1+0.2的结果为0.30000000000000004,不等于0.3详细解析:1、底层原因:Java的float、double遵循IEEE754浮点标准,采用二进制存储小数。大部分十进制小数无法用二进制精准表示,0.1和0.2都是无限循环的二进制小数,存储时会截断近似值。2、两个近似值相加后,误差叠加,最终结果出现精度偏差。解决方案:开发中涉及金额、精准小数计算,禁止使用float/double,必须使用BigDecimal类运算。8、面试题:floatf=3.14;能否编译通过?为什么?答案:编译报错详细解析:Java中所有小数字面量,默认类型是double。double是8字节,float是4字节,直接将double类型赋值给float属于大类型转小类型,存在精度丢失,编译器会直接报错。正确写法:floatf=3.14f;//手动添加f标识,字面量为float类型floatf=(float)3.14;//强制类型转换五、位运算面试题(底层高频)9、面试题:简述&、|、^、~、<<、>>、>>>位运算规则详细答案解析:位运算直接操作二进制,效率极高,底层框架、算法、权限校验常用:1、按位与&:两位同为1,结果为1,否则为0;2、按位或|:两位有一个为1,结果为1,否则为0;3、按位异或^:两位相同为0,不同为1;特性:一个数异或自身=0,异或0=自身;4、按位取反~:0变1,1变0;5、左移<<:二进制整体左移,低位补0,等价于乘以2的n次方;6、右移>>:带符号右移,正数高位补0,负数高位补1,等价于除以2的n次方(向下取整);7、无符号右移>>>:无论正负,高位一律补0。10、面试题:用位运算实现2*8,最高效的写法是什么?答案:2<<3详细解析:常规乘法需要CPU多层运算,左移是底层直接移位,效率最高。2左移3位,等价于2*2³=16,和2*8结果一致。开发中常用位运算替代乘除2的倍数运算,提升性能。六、运算优先级与复合赋值运算符11、面试题:+=、-=、*=、/=复合赋值运算符,是否自带强制类型转换?答案:自带隐式强制类型转换代码示例与解析:java

byteb=10;

b+=20;

//等价于b=(byte)(b+20);底层自动强转,编译通过

byteb2=10;

b2=b2+20;

//编译报错,b2+20结果为int,无强转直接赋值失败复合赋值运算符会自动将运算结果转换为左侧变量的类型,是开发中容易忽略的语法特性。12、面试题:Java运算符优先级简单说明,哪些优先级最高?答案核心总结:1、优先级最高:括号()、自增自减、位取反;2、其次:乘除模>加减>移位运算>比较运算>逻辑运算>赋值运算;3、日常开发不依赖默认优先级,复杂运算一律用括号明确顺序,避免BUG。七、综合压轴面试题13、面试题:写出以下完整代码的输出结果java

inta=3;

intb=4;

a+=b+++++a;

System.out

温馨提示

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

评论

0/150

提交评论