Java 中 a += b; 与 a = a + b; 有什么区别?
在 Java 语言中,a += b; 与 a = a + b; 的区别主要体现在运算精度上。
public class Num {
public static void main(String[] args) {
byte a = 1;
/*这里报错的原因是数字4默认是int型的,a是byte型的。在进行a+4时候,会自动进行类型转换,转换为int型,所以a+4会被
转换为int型*/
a = a + 4;
/*
* 使用a+=4这种形式就没有报错
* 为什么呢?
* 因为“+=”是Java中的一个运算符,而不是两个,所以在运算时,会进行自动类型转换
* */
a += 4;
System.out.println(a);
}
}
关于abstract为什么不能和static连用
静态分派与动态分派
- 静态类型:变量声明时的类型
- 动态类型:变量实例化时采用的类型
Human man=new Man();
我们把“Human”称为变量的静态类型,后面的“Man”称为变量的实际类型。
编译器在编译期并不知道一个对象的实际类型是什么。
编译器在重载时是通过参数的静态类型而不是实际类型作为判定依据。
- 静态分派:所有依赖静态类型来定位方法执行版本的分派动作称为静态分派,其典型应用是方法重载(根据参数的静态类型来定位目标方法)。
Scanner 的 hasNext() 方法
Scanner的hasNext()
当执行hasNext()时,它会先扫描缓冲区中是否有字符,有则返回true,继续扫描。直到扫描为空,这时并不返回false,而是将方法阻塞,等待你输入内容然后继续扫描。