为什么会有基本类型的包装类
- 将基本数据类型封装成对象的好处在于可以在对象中定义更多的功能方法操作该数据
常用操作
- 用于基本数据类型与自负串之间的转换
基本数据类型和包装类的对应
基本数据类型 | 包装类 |
---|---|
byte | Byte |
short | Short |
int | Integer |
long | Long |
float | Float |
double | Double |
char | Character |
boolean | Boolean |
基本数据类型包装类有八种 有七种都有(除了char的包装类 )parseXXX的方法 可以将这七种的字符串表现形式转换成基本数据类型
将int 转String
- 用 + 拼接"" 和 int 数 (常用)
- String.valueof(100);
- int 转成integer integer.toString
- Integer.toString(int i)(integer中的静态方法)
String 转int
- String -> Integer -> int
第一步用Integer的构造
第二部Integer.parseInt
(JDK5 的新特性)
自动装箱 : 把基本类型转换为包裹类型
自动拆箱 : 把包裹类型转换为基本类型
// JDK1.5 之前
int x=100;
Integer i1 = new Integer(x);// 将基本数据类型包装成对象,装箱
int y = i1.intValue();// 将对象转换为基本数据类型,拆箱
// JDK1.5 版本之后
Integer i2 = 100;// 自动装箱
int z = i2 +100;// 自动拆箱
// 底层实现如上所述
eg:
Integer i3 = null;
int a = i3+100;// 底层用i3调用intValue 但是i3是null 会报空指针异常
Integer的面试题
因为是两个对象 所以 == 判断不是一个对象 为false
不难看出第一段只创建了一个对象 两个Integer 引用指向的是同一个对象
-128 到 127 是byte的取值范围 如果在这个取值范围内,自动装箱就不会新创建对象,而是从常量池中获取 如果超过了byte取值范围就会在新创建对象
底层实现
assert关键字语法很简单,有两种用法:
如果在low和high之间(-128~127之间) 就从cache数组中取数 否则返回一个新的integer对象
(补充)
assert关键字语法很简单,有两种用法:
1、assert <boolean表达式>
如果<boolean表达式>为true,则程序继续执行。
如果为false,则程序抛出AssertionError,并终止执行。