java 基础知识 常见错误记录

java byte类型如何存取大于127的整数

当我们给b赋值成130后,会出现错误信息,这是因为byte的取值范围时-128到127
我们知道130的二进制位10000010,我们把它当成有符号的数值看的话,应该是个负数,而计算机中是以补码的形式存储的数字,因此要在此数值的基础上“符号位不变,其他位取反加一”,然后就是我们所需要的值,取反:11111101,加一:111111110,该数值为-126;
最后说一下大于127的整数被存储的简单规则就是用这个数值减去256,比如130-256=-126
byte b = -126
 

想使用java的byte存储 0-255的数据  就要使用新的方法 

比如 底层通信传递过来一个数据  byte=130  传递到java这里 变成了130-256=-126 想让这个数做运算我们就要把这个数 &0xFF 变成我们需要的数据130

一:基础类型 

正确使用equals方法

"SnailClimb".equals(str);// false 

Objects.equals(null,"SnailClimb");// false  (JDK7 引入的工具类)

整形包装类值的比较

所有整型包装类对象值的比较必须使用equals方法

Integer i1 = 40;
Integer i2 = new Integer(40);
System.out.println(i1==i2);//false

Integer i1=40 这一行代码会发生装箱,也就是说这行代码等价于 Integer i1=Integer.valueOf(40) 。因此,i1 直接使用的是常量池中的对象。而Integer i1 = new Integer(40) 会直接创建新的对象。因此,输出 false 。

说明:对于Integer var=? 在-128到127之间的赋值,Integer对象是在IntegerCache.cache产生,会复用已有对象,这个区间内Integer值可以直接使用==进行判断,但是这个区间之外的说有数据,都会在堆上产生,并不会复用已有对象,这是一个大坑,推荐使用equals方法进行判断。

浮点数精确到问题

具有基本数学知识的我们很清楚的知道输出并不是我们想要的结果(精度丢失),我们如何解决这个问题呢?一种很常用的方法是:使用 BigDecimal 来定义浮点数的值,再进行浮点数的运算操作。

BigDecimal a = new BigDecimal("1.0");
BigDecimal b = new BigDecimal("0.9");
BigDecimal c = new BigDecimal("0.8");

BigDecimal x = a.subtract(b); 
BigDecimal y = b.subtract(c); 

System.out.println(x); /* 0.1 */
System.out.println(y); /* 0.1 */
System.out.println(Objects.equals(x, y)); /* true */

 BigDecimal 保留几位小数

通过 setScale方法设置保留几位小数以及保留规则。保留规则有挺多种,不需要记,IDEA会提示。 

byte的运算问题

结论:byte不能直接进行加减运算 因为他存的是负数  想运算要转成&0xFF 变成对应的整数在运算 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值