Java陷阱(六)
欢迎来到阿八个人博客网站。本 阿八个人博客 网站提供最新的站长新闻,各种互联网资讯。 喜欢本站的朋友可以收藏本站,或者加QQ:我们大家一起来交流技术! URL链接:https://www.abboke.com/xwzhj/2019/0611/373.html
摘自《Java解惑》。这些问题都很经典,可以细细品味。
今天讲解的问题如下,大问题、差是什么、日期游戏、Math.abs方法。
大问题
public class BigProblem2 { public static void main(String[] args){ BigInteger a = newBigInteger("5000"); BigInteger b = newBigInteger("1000"); BigInteger c = BigInteger.ZERO; c = c.add(a); c = c.add(b); System.out.println(c); } }
分析
BigInteger实例是不可变的。String、BigDecimal、Integer、Long、Short、Byte、Character、Boolean、Float、Double也是如此。我们不能修改它们的值,对这些类型的操作将返回新的实例。
修改
public class BigProblem { public static void main(String[] args){ BigInteger a = newBigInteger("5000"); BigInteger b = newBigInteger("1000"); BigInteger c = BigInteger.ZERO; c.add(a); c.add(b); System.out.println(c); } }
差是什么
public class Differences { public static void main(String[] args){ int a = 012; int b = 10; System.out.println(a-b); } }
分析
以0开头的整形常量将被解释成为八进制数值。
建议
千万不要在一个整型常量前面加一个0,这会使它变成一个八进制常量。
日期游戏
public class DatingGame { public static void main(String[] args){ Calendar cal = Calendar.getInstance(); cal.set(1999,12, 31); System.out.println(cal.get(Calendar.YEAR)); } }
分析
Date将一月表示为0,而Calendar延续了这个错误。
建议
在使用Calendar或Date的时候一定要当心,千万要记得查阅API文档。
Math.abs方法
public class Abs { public static void main(String[] args){ int i = Math.abs(Integer.MIN_VALUE); System.out.println(i); } }
分析
Math.abs不能保证一定会返回非负的结果。如果它的参数是Integer.MIN_VALUE或者Long.MIN_VALUE。