Java 中关于基本数字类型的注意事项

局部变量需初始化才能访问

public void test() {
    float n;
    n = n + 1;
}

 

窄化导致自增异常

short i = 3;
i += 1;  // 不提升

short i = 3;
i = i + 1;  //错误,short 提升为 int

 

隐藏的窄化异常

float n =5; //5.0
float n =5.0; //报错,类型转换异常 (对于浮点数,默认为 double

 

提升不会发生自增异常,

float n = 3;
n = n + 1; //4.0

 

 Math 的 round 方法并不是完全四舍五入。它的实现相当于 

(int)Math.floor(a + 0.5f)

示例:

public void test() {
    double f1 = Math.round(3.5);
    double f2 = Math.round(-3.5);
    System.out.println(f1);
    System.out.println(f2);
}

// output:
4.0
-3.0

 

局部变量问题(方法栈空间的变量所指向的值会被复制一份到栈空间)

case class Person(name: String)

class MyClass {
  var field: Person = Person("lisi")

  def p1(): Unit = {
    val field_ = field
    println(field_)
    changeField()
    println(field_)
  }

  def p2(): Unit = {
    println(field)
    changeField()
    println(field)
  }

  def changeField(): Unit = {
    this.field = Person("wu")
  }
}

object Test {
  
  /**
   * 单独运行 p1,输出:
   * Person(lisi)
   * Person(lisi)
   *
   * 单独运行 p2,输出
   * Person(lisi)
   * Person(wu)
   */
  def main(args: Array[String]): Unit = {
    val myClass = new MyClass()
//    myClass.p1()
    myClass.p2()
  }

}

  

233

posted on 2018-09-05 13:49  Lemo_wd  阅读(168)  评论(0编辑  收藏  举报

导航