包装类
- 除了int和char是Integer和Character之外其他都是首字母大写
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/01ec355a2d4df9504e0faf5d338db64f.png#pic_center)
- Number类:除了Character和Boolean之外的都是“数字型”,都是Number的子类
- Number类是抽象类他的方法子类都实现,它的子类之间可以互相转换
![,](https://i-blog.csdnimg.cn/blog_migrate/8e979226041791d2038c22e8aab291be.png#pic_center)
包装类作用
- 可以把基本数据,字符串,包装类对象之间来回转化
- 作为和基本数据类型对应的类型存在,方便涉及到对象的操作,如 Object[ ]、集合等的操作。
package com.ssc.someclass;
public class Packaging {
public static void main(String[] args) {
Integer i = Integer.valueOf(10);
double d = i.doubleValue();
Integer i1 = Integer.valueOf("234");
Integer i2 = Integer.parseInt("234");
String str = i2.toString();
System.out.println(Integer.MAX_VALUE);
System.out.println(Integer.MIN_VALUE);
}
}
自动拆箱和装箱&包装类缓存问题&空指针问题
- 自动拆箱是通过xxxValue()实现的
- 自动装箱是通过valueOf()实现的
- 空指针:null 表示 i 没有指向任何对象的实体,但作为对象名称是合法的由于实际上 i 并没有指向任何对象的实体,所以也就不可能操作 intValue()方法,这样上面的写法在运行时就会出现 NullPointerException 错误
Integer a = 5;
int b = a;
Integer d1 = 4000;
Integer d2 = 4000;
Integer d3 = 123;
Integer d4 = 123;
System.out.println(d1==d2);
System.out.println(d3==d4);
System.out.println(d1.equals(d2));
自定义一个包装类
package com.ssc.someclass;
public class MyInteger {
private int value=300;
private static MyInteger[] cache = new MyInteger[256];
public final static int LOW = -128;
public final static int HIGH = 127;
static {
for(int i=MyInteger.LOW;i<=HIGH;i++) {
cache[i+128] = new MyInteger(i);
}
}
public static MyInteger valueOf(int i) {
if(i>=LOW && i<HIGH) {
return cache[i+128];
}
return new MyInteger(i);
}
private MyInteger(int i) {
this.value = i;
}
@Override
public String toString() {
return this.value+"";
}
public static void main(String[] args) {
MyInteger m = MyInteger.valueOf(40);
System.out.println(m);
}
}