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
浙公网安备 33010602011771号