1、八个基本类型占多少个字节?占多少位?
基本类型 | 字节 | 位 |
---|---|---|
boolean | 1 | 1 |
byte | 1 | 8 |
char | 2 | 16 |
short | 2 | 16 |
int | 4 | 32 |
float | 4 | 32 |
long | 8 | 64 |
double | 8 | 64 |
2、哪些基本类型有缓存池?
基本类型 | 缓冲池值 |
---|---|
boolean | true/false |
byte | 所有值 |
short | -128~127 |
int | -128~127 |
char | \u0000 to \u007F |
3、String是不是可变长度?
不是,因为它被声明为final,不可继承,内部使用的char数组也是被声明为final,所以不可变。然而,由于string是不可变的特性,常常被用做hashmap的key值,它只需要计算一次。同时,它是线程安全的。
4、StringBuffer and StringBuilder的区别?
它们两个都是可变长度,但StringBuffer是线程安全的,内部使用了synchronized 同步,而StringBuilder不是线程安全的
5、接口与抽象类有什么区别?
- 一个类可以实现多个接口,但是不能继承多个抽象类。
- 接口的字段只能是 static 和 final 类型的,而抽象类的字段没有这种限制。
- 接口的成员只能是 public 的,而抽象类的成员可以有多种访问权限。
6、类的初始化顺序是怎么样的?
存在继承的情况下,初始化顺序为:
- 父类(静态变量、静态语句块)
- 子类(静态变量、静态语句块)
- 父类(实例变量、普通语句块)
- 父类(构造函数)
- 子类(实例变量、普通语句块)
- 子类(构造函数)
7、说一下你知道的异常?异常分为两大类,分别是什么?
8、Java 中 ++ 操作符是线程安全的吗?
不是线程安全的操作。它涉及到多个指令,如读取变量值,增加,然后存储回内存,这个过程可能会出现多个线程交差。还会存在竞态条件(读取-修改-写入)。
9、byte a=127,b=127;a = a + b与a += b的区别?
+= 隐式的将加操作的结果类型强制转换为持有结果的类型。如果两这个整型相加,如 byte、short 或者 int,首先会将它们提升到 int 类型,然后在执行加法操作。
(因为 a+b 操作会将 a、b 提升为 int 类型,所以将 int 类型赋值给 byte 就会编译出错)