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



