错题积累(2024.02.01)---面试相关

java面试

1.java开发中计算金额时使用什么数据类型?

不能使用double或float,因为精度不高。

使用BigDecimal类替换,可以实现任意精度的数据的运算。

2.char型变量中能不能存储一个中文汉字,为什么?

可以,char c = '中'。

char c2 = 'a',a对应ascill中的97,ascill中确实不包含中文,但是目前的unicode编码是一个更大的字符集。

因为char使用的是unicode字符集,包含了世界范围的所有字符。

3. short s1 = 1; s1 = s1+1;有什么错? 

答:等号右边是int 类型,需要强转

short s1 = 1; s1 += 1;有什么错? 

答:没错,可以正常执行。

4.int i=0;i=i++执行这两句话后变量i的值为?

答:0

5.boolean占几个字节?

答:编译时不谈占几个字节。

但是JVM在给boolean类型分配内存控件时,boolean类型的变量占据一个槽位(slot,等于4个字节)

细节:true :1 false:0

拓展:

在内存中,byte\short\char\boolean\int\float:占用一个slot

double\long:占用两个slot

补充:槽位是java虚拟机分配内存时的基本单位

6.为什么Java中0.1+0.2结果不是0.3?

代码测试0.1+0.2,结果不是0.3,而是0.30000.....4

答:几乎所有现代的编程语言都会遇到上述问题,包括JavaScript Rubby Python Swift Go等,引发这个问题的原因是,它们都采用了IEEE754标准。

IEEE是指“电气与电子工程师协会”,其在1985年发布了一个IEEE754计算标准,根据这个标准,小数的二进制表达能够有最大的精度上限提升。但无论如何,物理边界是突破不了的,它仍然“不能实现每一个十进制小数都对应一个二进制小数”。正因如此,产生了0.1+0.2不等于0.3的问题。

具体来说:整数变为二进制,能够做到“每个十进制整数都有对应的二进制数”,例如数字3,二进制是11,毫无争议。

在编程中,遇见小数判断相等情况,可以采用四舍五入或者同乘同除等方式进行验证,避免出现问题

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值