Java 常用API x容易中招的几大坑

1. int i =10;

Math.round(i) == i ?  => 90% 多的时候都不等,round() 参数为float型,故 round(0)会把参数提升为float, 然后再四舍五入,失了精度。

2.  ()?():() 使用时,尽量不要有不同的类型混着用, 会产生不可预期的结果,

此时应该用if, else

3. Math.abs() 看起来任何时候都不会为负数,实际上当参数为 -2147483648 时,结果还是-2147483648。 

4.in.skip() 并不是所有时候都会正常跳过。 参数为10*1024或者很大时,就不知道跳哪儿去了。应该在使用这个API时加上返回值判断。

5. 当在写单例模式时,不要在类的一开始就用

public static final MYClass obj = new MYClass();

这样会形成递归,并不会实例化。在使用时也是空指针异常。

应该在类的最后,进行初始化,或者在getxx()中再初始化。

如果一定在要类中初始化,确保这一行要写在其他静态成员初始化之后。

e.g. 

public static final String name = "xx“;

public static final MYClass obj = new MYClass();

6. 

assertEquals 正确时并没有打印。

异常时用以下方式:

try {            

assertEquals(2, number);      

  }

catch(Error e)

{          

 error = e;      

 }

catch(Exception e)

{            

exception = e;      

 } 

7. 不要用URL 来作为map的key , 或者 Set的元素。

URL 虽然字符串看着不同,但是解析成ip:port后,如果相同就会产生和我们预期不一样的效果。

我们要用URL为map的key , 或者 Set的元素。最好使用URI 代替。

8. 当Set定义成Set xx;

然后向xx中加入short 元素i,再从xx中 remove(i), 其实是没有被remove的,因为加入的是short, remove的是int。

remove(Object)会把short i自动提升成int, 结果就找不到可移除的对象。

解决:我们应该避免使用short这种会自动提升的类型,如果一定要用,用xx.remove((short) i  ), 这样才会是预期的。

 

9. [摘自http://blog.didispace.com/something-about-YYYY-MM-dd/]

YYYYweek-based-year,表示:当天所在的周属于的年份,一周从周日开始,周六结束,只要本周跨年,那么这周就算入下一年。所以2019年12月31日那天在这种表述方式下就已经 2020 年了。

而当使用yyyy的时候,就还是 2019 年。

10. 在RabbitMQ中,消息的过期时间必须是非负 32 位整数,即:0 <= n <= 2^32-1,以毫秒为单位。 其中,2^32-1 = 4294967295。如果超过这个值就会不生效。故使用时必须要注意各数据类型的边界。翟永超老师遇到过。

http://blog.didispace.com/rabbitmq-deplay-message-max/

你可能感兴趣的:(java)