文章目录

  1. 1. 大问题
    1. 1.1. 分析
    2. 1.2. 修改
  2. 2. 差是什么
    1. 2.1. 分析
    2. 2.2. 建议
  3. 3. 日期游戏
    1. 3.1. 分析
    2. 3.2. 建议
  4. 4. Math.abs方法
    1. 4.1. 分析

摘自《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。

(完)

微信公众号

文章目录

  1. 1. 大问题
    1. 1.1. 分析
    2. 1.2. 修改
  2. 2. 差是什么
    1. 2.1. 分析
    2. 2.2. 建议
  3. 3. 日期游戏
    1. 3.1. 分析
    2. 3.2. 建议
  4. 4. Math.abs方法
    1. 4.1. 分析