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