java 有意思面试题_一些JAVA中有趣的面试题

这几天的JAVA培训课上,不断的唤醒自己对JAVA的理解(时间太长,大学学的快忘干净了),其中有一些很有趣的面试题,都是在抠JAVA细节(唉,我是那种见坑就往下跳的人,一做就错),下面就来分享一下:

1)用JAVA程序写出当你在超市购物花费1.1元时,你给收银员2元钱,收银员找你0.9元的过程;

当时一看题目,好简单啊!迅速写出:

public classSell{public static voidmain(String[] args){double total = 2.0;double used = 1.1;double result = total -used;

System.out.println("result : " +result);

}

}

结果就悲剧了,因为JAVA中的浮点型运算只得到近似值,运行结果为:0.8999999999999999

为得到精确结果,需要调用JAVA在java.math包中提供的API类BigDecimal。(float和double只能用来做科学计算或者工程计算,在商业计算中要用java.math.BigDecimal)

正确结果为:

importjava.math.BigDecimal;public classSell1{public static voidmain(String[] args){

BigDecimal bd1= new BigDecimal("2.0");

BigDecimal bd2= new BigDecimal("1.1");

System.out.println((double)bd1.subtract(bd2));

}

}

运行结果:0.9

2)用强制类型转换(int)(char)(byte)-1,最后的结果为多少

当时看到这道题瞬间一愣,后来一想不还是-1吗,但不确定,就运行了一下,的到的结果为:65535((⊙o⊙)…更蒙了),后来才知道char字符型,存放字符常量,底层使用16位无符号整型表示,而且有符号数采用符号扩展,无符号数采用0扩展(计算机中,数都以补码的形式存放),所以计算的过程为:

100000000000000000000001

111111111111111111111111

1111,1111 byte

1111,1111,1111,1111 char

0000,0000,0000,0000,1111,1111,1111,1111 int

最后结果为:65536

3)int a = 1,b = 2,c = 3;

if(a > b && c++ > b)

int a = 1,b = 2,c = 3;

if(a > b & c++ > b)

两段程序中输出c值,各为多少?(哈哈,这道题我还知道第一个答案c = 3,第二个就蒙了)原来:

&&:逻辑运算符,具有逻辑短路功能(连接的两个条件,如果第一个条件为假,后面的条件不进行运算)

&:位运算符,但可以连接连个条件,但没有短路功能

结果为:第一个c = 3,第二个c = 4

4)String str1 = 'a' + 3 + "Hello";

String str2 = "Hello" + 'a' + 3;

str1,str2输出的结果为多少?(这回不敢大意了,一定有坑,但想了想,不会啊,还是跳坑吧)

其实“+对String类型是做字符串连接操作”,程序员几乎都知道,但“char字符型,存放字符常量,底层使用16位无符号整型表示”注意到的人就少了,这道题的结果为:

str1 = 100Hello

str2 = Helloa3

现在就这些,以后有的话再更新,JAVA要注重细节啊!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值