Java解惑——笔记

(1)Java负数取余操作保留符号,因此判断i是否为奇数的方法(i%2 == 1)四分之一概率会出现错误,修改为(i%2 != 0)或者(i&1 != 0)

(2)使用Java的float和double二进制格式无法精确表示小数,可以修改其打印格式,但是机器码中的表示是不精确的,因此在表达货币计算时,应该使用int或者long表示而降低货币单位,或者使用BigDecimal类,注意BigDecimal可以使用String或者Double构造,货币计算情况下不可以使用Double,因为Double是不准确的。总之,在需要精确答案的地方避免使用float或者double。

(3)当操作较大的数字时,一定要防止溢出。Java中计算默认是以int进行的,如果long a = 1000*24*24*89*55555,那么后面的数字都是int计算的,先把1000*24*24*89*55555的结果放在int里面,然后在转化成long,这时就会发生溢出。如果修改成long a = 1000L*24*24*89*55555,会强制使用long计算,这样就不会发生溢出了。

(4)十六进制和八进制字面常量无需显式的减号符号就可以表示负的数值,最好是避免混合类型的计算。1234L+0xcafe中,0xcafe做int处理,最高位置1会被当成负数,转化为long之后变成0xfffffffffcafeL加上1234L,故。。。

(5)Java中byte是有符号的8位,char是无符号16位,(int)(char)(byte)-1为多少。转化规则:如果最初的数值类型是有符号的,那么就执行符号扩展;如果它是char,那么不管它将要转成什么类型,都执行零扩展。-1首先是int,32位均置位,转成byte是窄化原生类型转换,直接砍掉多余的位,byte转化为char是拓宽,执行符号扩展,变成16位置1,再由char转换成int则直接加16个0,最终变成65535。short和char一样长,但是是有符号的,如果希望char转成其他类型存在符号扩展,可以把char先转换成short。

(6)当且仅当+操作符的操作数中至少有一个是String类型时,才会执行字符串连接操作

(7)char在Java中就是一个无符号整数,char[]在不同对象中有不同的重载方法,要想将一个char数组转换成一个字符串,就要调用String.valueOf(char[])方法。

(8)只有在你要向程序中插入用其他任何方式都无法表示的字符时,Unicode转义字符才是必需的,除此之外的任何情况都应该避免使用它们。Unicode转义字符必须是良构的,即使出现在注释中也是如此。在字符串和字符常量中优先选择的是转义字符序列,而不是Unicode转义字符。Unicode转义字符都是在编译前处理的,类似宏替换。

(9)行分隔符在windows平台有CR字符(回车)和紧随其后的LF字符(换行)组成。在UNIX平台上,通常引用单独的LF字符作为换行符。

(10)把任何字节数组转换成String都会使用指定的或者默认的字符集。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值