Java中的常用类
包装类
在一个类中,会使用到基本数据类型。基本类型就是一个数,加点属性,加点构造器、方法,将这些进行一个封装,产生的一个类,就是包装类。
基本数据类型对应的包装类:
基本数据类型 | 对应的包装类 | 继承关系 |
---|---|---|
byte | Byte | Number–>Object |
short | Short | Number–>Object |
int | Integer | Number–>Object |
long | Long | Number–>Object |
float | Float | Number–>Object |
double | Double | Number–>Object |
char | Character | Number–>Object |
boolean | Boolean | Number–>Object |
上面的继承关系表示的是:上面的所有的包装类继承的是Number,又因为Object是所有类的父类,所以上面的类是间接的继承Object,直接继承是Number。
现在还会存在的疑问是已经存在基本数据类型,为什么还会出现包装类?
- 因为Java是一门面向对象的语言,我们所用到的也是面向对象的思维,面向对象思维最擅长的就是操纵各种类,如果把基本数据类型编程包装类,就可以对类进行操纵。
- 数组是我们所学习过的内容,它就是用来存放东西的,存放基本数据类型和引用数据类型。在之后我们还会学习到集合,一样的用来存放东西的,但是只能用来存放引用数据类型。
- 现在学习了包装类,是否以后就不用基本数据类型呢?
- 不是。在很多时候我们是用不到包装类的,因为我们使用基本数据类型更加简洁,还能节省空间。
在上面的八个包装类中,它们的用法是相同的,只要会一个,其他的也就都一样。
在API文档(Java使用手册)中我们可以知道Integer在lang包中,所以可以直接进行使用,不需要导包(java中java.lang包的内容是自动导入的,不需要手动导入,其它必须手动导入)。
上图我们可以看到Integer的层次关系。
继承关系:Integer–>Number–>Object
实现接口:直接实现Comparable:当中一定实现了一个方法:compareTo方法–>内部比较器
在API中,我们查看Integer可以发现,在其中进行了这样的介绍:
- 不是。在很多时候我们是用不到包装类的,因为我们使用基本数据类型更加简洁,还能节省空间。
Integer类在对象中包装了一个基本类型int的值:表示的是给基本数据类型加入了其他的一些其他的构造器、其他的一些方法就形成了Integer这样的一个包装类。
Integer类型对象包含一个int类型的字段。
在API中对Integer进行了属性、方法、构造器等的介绍,如下所示,对API中的字段(属性)进行了应用:
在使用该包装类的时候,我们可以知道一个“物极必反”原则,也就是在输出最值的时候,进行加操作或减操作,就会获取到相反的值:
构造器的使用,就是给包装的int数据类型的赋值。
如果说传入的参数不对,就会报出下图中的异常,因为在该包装类中,已经抛出了这样的一个异常:
如果传入非数字信息,就会出现原本抛出的异常(运行时异常):
String类型的参数作构造器,谁调用了这个构造器,已经告知这个构造器中可能出现的异常,只要传入的不是全数字就会抛出异常。
在一个过程中,我们把包装类给到该类型,就属于拆箱。反之,如果把该类型给到包装类就属于装箱。如下图所示:
常用方法:
- compareTo:
为什么结果会等于1,这时候就需要进入该方法看源码进行理解:
- equals:
在看到equals时不禁会想到==,它们之间的关系是非常的密切的,equals是判断两个的值是不是相等,equals判断的是两个值之间是不是相等关系。
可以看到上面的方法重载,用一个Object来接收Integer,在下面的语句中就将obj转化成了Integer,调用了一个inValue的方法。
equals重写了object中的equals方法,在方法中进行比较的是:具体封装的value值是否相等。
注意:
第一种情况,自动装箱的包装类进行比较
Integer I1 = 12;
Integer I2 = 12;
System.out,print(I1==I2);//true
System.out,print(I1.equals(I2));//true,这里需要关注的是在某个区间是true,超出区间则是false。
第二种情况,new关键字进行比较
Integer I1 = new Integer(66);
Integer I2 = new Integer(66);
System.out,print(I1.equals(I2));//true
System.out,print(I1==I2);//false,表示的是不同的两个地址,所以是不相等的
自动装箱的包装类进行比较:
Integer I1 = 116;
Integer I2 = 116;
上面的两个数进行比较,在-127-128之间,那么输出就会是true,如果不是则是false。
数在-128-127之间,比较的是数,返回的是true。
如果没在这个区间,那么就会在这个底层会自动的创建一个对象,比较的就是地址值,所以返回输出的就是false。
数组cache的区间:
0 | -128 |
---|---|
1 | -127 |
… | … |
255 | 127 |
- intvalue()
以int类型返回该Integer的值。所以它的返回值是int。
- parseint
传一个String的值,用int来接收:
错误示范:
正确示范:
- toString