Java包装类
什么是包装类
Java基本的知识是大二学的,当时是网课的形式,一节课都没有听过,练习题和考试都是根据C++的记忆混过去的,现在幡然醒悟决定好好看一看Java,所以今天就遇到了一个很常见的问题,刷牛客上的Java练习题目的时候有一道关于Integer和int区别的题目,因为不是很懂,所以搜了搜资料,决定写下这篇博客,有什么错误欢迎大家指正。
首先,这个包装是针对基本数据而言的,那么什么是基本数据类型呢,这个大家应该门儿清,总共有八种,
分别是int,short,long,float,double,char,byte,boolean
基本数据类型不是类类型,所以它们没有对应的实例,也没有对应的各种各样的功能。而且,如果我们不为其赋初值的话,书本数据类型变量是有默认值的,那么它就不能为空值,而且java 在某些场景中是不能用基本数据类型而只能使用对象的,所以java引入了包装类这个概念。
这八种数据类型都有各自的包装类
基本数据类型 | 默认值 | 所占字节大小 | 对应包装类 |
---|---|---|---|
short | 0 | 2 | Short |
int | 0 | 4 | Integer |
long | 0 | 8 | Long |
float | 0.0f | 4 | Float |
double | 0.0d | 8 | Double |
char | ‘\u0000’ | 2 | Character |
byte | 0 | 1 | Byte |
boolean | false | 1(bit) | Boolean |
而之所以管他们叫包装类,而不叫类,那肯定是有原因的,的确,包装类和普通类有不一样的地方,首先,他们在初始化的时候既可以用New来创建实例,也可以像基本数据类型那样直接赋值,像这样:
Integer a2=3;
Integer a3=new Integer(3);
其次,以Integer包装类为例,Integer包装类中含有两个重要方法,分别是intValue()和valueOf()方法。它们有什么用,我写了点东西,这里大家自行体会
Integer x1=new Integer(3);
Integer x2=new Integer(3);
System.out.println(x1==x2);//false
System.out.println(x1.intValue()==x2.intValue());//true
String a="1024";
System.out.println(1024==Integer.valueOf(a));//true
System.out.println(1024f==Float.valueOf(a));//true
System.out.println("1024"==String.valueOf((int)1024));//false
我的理解是intValue()就是用来返回与包装类同类型的基本数据类型变量,比如这里的x1本来是Integer型的,x1.intValue()就成了int类型,同理还有x1.floatValue()是float型等等。而valueOf(s)则是被多个包装类重写了的方法,如Integer.valueOf(s)的作用是返回一个由参数代表的Integer对象,参数可以是一个字符串或者int型数据,Float.valueOf(s)同理。当然还有一种形式的参数列表是(String s,int radix),有兴趣大家可以自己查资料了解其区别
这里值得注意的一点是String类(非包装类)也重写了valueOf方法,由以下几种:
String.valueOf(object)
String.valueOf(char[])
String.valueOf(基本数据类型)
以下还有一段我自己测试的代码供大家参考:
String s1="1024";
String s2="1024";
String s3=new String("1024");
String s4=new String("1024");
System.out.println("1024"=="1024");//true
System.out.println(s1==s2);//true
System.out.println(s3==s4);//false
System.out.println("1024"==String.valueOf(1024));//false
System.out.println("1024".equals(String.valueOf(1024)));//true
好啦,博客就写道这里,这就是我对Java基本数据类型装箱的一些粗浅的理解,最后再次欢迎大家的批评指正,若能为小弟答疑解惑的话,才是最好的