Java包装类、拆箱和装箱详解
Java自动装箱与拆箱及其陷阱分析

Java自动装箱与拆箱及其陷阱分析定义大家在平时编写Java程序时,都常常以以下方式来定义一个Integer对象:Integeri=100;从上面的代码中,大家可以得知,i为一个Integer类型的引用,100为Java中的基础数据类型(primitivedatatype)。
而这种直接将一个基础数据类型传给其相应的封装类(wrapperclass)的做法,便是自动装箱(Autoboxing)。
在jdk1.5中,自动装箱首次被引入。
而在jdk1.5之前,如果你想要定义一个value为100的Integer对象,则需要这样做:Integeri=newInteger(100);原理我们在以上代码“Integeri=100;”处打一个断点,跟踪一下。
接下来,我们可以看到,程序跳转到了Integer类的valueOf(inti)方法中/***Returnsa Integer instancerepresentingthespecified*int value.*Ifanew Integer instanceisnotrequired,thismethod*shouldgenerallybeusedinpreferencetotheconstructor*{@link#Integer(int)},asthismethodislikelytoyield*significantlybetterspaceandtimeperformancebycaching *frequentlyrequestedvalues.**@paramian int value.*@returna Integer instancerepresenting i.*@since1.5*/publicstaticIntegervalueOf(inti){if(i>=-128&&i<=IntegerCache.high)returnIntegerCache.cache[i+128];elsereturnnewInteger(i);}换句话说,装箱就是jdk自己帮你完成了调用Integer.valueOf(100)。
java boxed用法

java boxed用法Java中的Boxed用法在Java中,有时候需要将基本数据类型转换为对象,以便能够在面向对象的环境中使用它们。
这时,就可以使用Boxed用法来实现。
Boxed用法是将基本数据类型包装成对应的包装类,以便能够使用包装类的属性和方法。
Boxed用法可以分为两个方面来描述:自动装箱和手动装箱。
1. 自动装箱自动装箱是指将基本数据类型自动转换为包装类对象的过程。
在Java中,当我们将基本数据类型赋值给对应的包装类时,编译器会自动调用该包装类的构造方法来创建一个包装类对象。
例如,我们可以将一个int类型的变量赋值给一个Integer类型的变量:```javaint num = 10;Integer number = num; // 自动装箱,将int类型的num转换为Integer类型的number```同样地,我们也可以将一个boolean类型的变量赋值给一个Boolean类型的变量:```javaboolean flag = true;Boolean bool = flag; // 自动装箱,将boolean类型的flag转换为Boolean类型的bool```通过自动装箱,我们可以将基本数据类型直接使用在需要包装类的场景中,方便了我们的开发。
2. 手动装箱手动装箱是指我们显式地将基本数据类型转换为包装类对象。
这种方式可以通过包装类的构造方法来实现。
例如,我们可以通过Integer的构造方法将一个int类型的变量转换为对应的包装类对象:```javaint num = 10;Integer number = new Integer(num); // 手动装箱,将int类型的num转换为Integer类型的number```同样地,我们也可以通过Boolean的构造方法将一个boolean类型的变量转换为对应的包装类对象:```javaboolean flag = true;Boolean bool = new Boolean(flag); // 手动装箱,将boolean类型的flag转换为Boolean类型的bool```需要注意的是,手动装箱需要我们显式地进行转换操作,因此较为麻烦,但在一些特殊情况下可能会使用到。
java基本类型和包装类型

Java基本类型和包装类型在Java编程语言中,有8种基本类型和对应的包装类型。
基本类型是Java语言的内置类型,用于存储简单的数据值,而包装类型则是基本类型的对象表示。
本文将详细介绍Java的基本类型和包装类型,包括它们的定义、特性和常见用法。
基本类型Java的8种基本类型分为4种整型、2种浮点型、1种字符型和1种布尔型。
基本类型的定义如下:1.整型–byte:8位有符号整数,取值范围为-128到127。
–short:16位有符号整数,取值范围为-32768到32767。
–int:32位有符号整数,取值范围为-2147483648到2147483647。
–long:64位有符号整数,取值范围为-9223372036854775808到9223372036854775807。
2.浮点型–float:32位浮点数,取值范围为1.4e-45到3.4028235e+38,精度为6-7位小数。
–double:64位浮点数,取值范围为4.9e-324到1.7976931348623157e+308,精度为15位小数。
3.字符型–char:16位Unicode字符,取值范围为’000’到’’。
4.布尔型–boolean:表示真或假的值,取值为true或false。
基本类型具有以下特点:•基本类型的变量直接存储值,不占用堆内存空间。
•基本类型的默认值与其对应的包装类型的默认值不同。
例如,int的默认值为0,而Integer的默认值为null。
•基本类型的赋值是按值传递的,即将一个变量的值复制给另一个变量。
基本类型的使用示例:int age = 20;double salary = 5000.0;char grade = 'A';boolean isMarried = false;包装类型Java的包装类型是为了将基本类型转换为对象而提供的。
每种基本类型都有对应的包装类型,包装类型位于ng包中。
java判断基本数据类型的方法

java判断基本数据类型的方法在Java中,判断基本数据类型的方法包括使用关键字"instanceof"、自动装箱与拆箱、逻辑运算符、比较运算符、类型转换等。
下面将分别详细介绍这些方法。
1. 使用关键字"instanceof":instanceof是Java中的一个二元操作符,可以用来判断一个对象是否是一些类的实例,也可以用来判断一个类是否是另一个类的子类。
通过使用instanceof关键字,我们可以判断一个对象是否是一些基本数据类型的实例。
例如,我们可以使用下面的代码判断一个对象是否是整数类型的实例:```Object obj = 123;if (obj instanceof Integer)System.out.println("obj是整数类型的实例");```这段代码中,我们使用instanceof关键字将obj与Integer类型进行比较,如果obj是Integer类型的实例,则输出"obj是整数类型的实例"。
2.自动装箱与拆箱:在Java中,基本数据类型和对应的包装类之间存在着自动装箱和拆箱的机制。
自动装箱是指将基本数据类型自动转换为对应的包装类,而自动拆箱则是将包装类自动转换为对应的基本数据类型。
通过使用自动装箱和拆箱机制,我们可以将基本数据类型与包装类进行比较。
例如,我们可以使用下面的代码判断一个对象是否是整数类型的实例:```Object obj = 123;if (obj instanceof Integer)System.out.println("obj是整数类型的实例");```这段代码中,我们将整数123自动装箱为Integer类型的对象,然后再使用instanceof关键字将obj与Integer类型进行比较。
3.逻辑运算符:在Java中,逻辑运算符可以用来对基本数据类型进行判断。
老九Java基础课关于包装类的总结

老九Java基础课关于包装类的总结1、包装类:将基本数据类型值作为对象处理。
把基本类型相应的属性和方法封装到包装类中,以后使用基本类型自带强悍方法基本类型的值不是对象,可以使用JavaAPI中的包装类包装成对象ng包2、基本类型包装类Int Integerdouble Doublechar Character除int char外的首字母大写为包装类3、将Java基本类型打包成对象装箱拆箱4、举例int num1 = 10;//打包基本类型Integer iNum = new Integer(num1); //或者Integer iNum = Integer.valueOf(num1);//自动装箱Integer iNum = num1;//拆箱int num2 = iNum2.intvalue();//自动拆箱int num3 = iNum2;//比较值pareTo(iNum2); //iNum1 > iNum2 返回-1 相等返回0 小于返回-1 5、用包装类方法可以将String类型转换成double等基本类型double num = Double parseDouble("3.14");6、为了节约装箱和拆箱的过程,直接把基本类型定义成包装类型String str = "123";Integer.parseInt(str);Double parseDouble(str);7、char的包装类Character的一些方法Character.isDigit 是否是字母Character.isLetter(ch) 是否是字母Character.isLetterOrDigit(ch) 是否是数字或字母Character.isJavaIdentifierPart(ch) 判断用来定义Java变量的单词中,除首字符外,其他字符是否是合法字符Character.isJavaIdentifierStart(ch) 判断JAVA变量中,第一个字符是否是合法字符Character.isUpperCase(ch) 判断是否是大写字母8、注意<1>包装类没有无参构造,所有包装类的实例都是不可变的,一旦创建对象后,他们内部的值就不能改变<2>每个基本类型包装类都有常量MAX_VALUE和MAX_INVALUE 老九学堂会员社群出品作者:小萌男神。
Java中的包装类 装箱和拆箱

Java中的包装类装箱和拆箱在java中,数据类型总共可分为两大种,基本数据类型(值类型)和类类型(引用数据类型)。
基本类型的数据不是对象,不能作为对象调用其toString()、hashCode()、getClass()、equals()等等方法。
所以在java中,针对8种基本数据类型,提供了针对每个基本数据类型的包装类。
如下:所谓装箱,就是把基本类型用它们相对应的引用类型包起来,使它们可以具有对象的特质,如我们可以把int型包装成Integer类的对象,或者把double包装成Double,等等。
所谓拆箱,就是跟装箱的方向相反,将Integer及Double这样的引用类型的对象重新简化为值类型的数据。
//JDK1.5 之前使用手动方式进行装箱和拆箱的操作public class IntegerDemo{public static void main (String []agrs){int i=10;Integer j=new Integer(i); //手动装箱操作int i1=j.intValue();//手动拆箱操作System.out.println(i1*i1);}}; //output:100//JDK1.5之后可自动进行的装箱和拆箱的操作,比较方便public class IntegerDemo02{public static void main (String []agrs){int i=10Integer j=i;int k=j;System.out.println(++k);}}; //output:11包装类的另外一个比较有用的是可以将String 字符串类型转换为相应的基本数据类型。
下面以将String转为int为例:public class IntegerDemo04{public static void main (String[] args){String str="1500";try{int i=Integer.parseInt(str);System.out.println(++i);}catch (Exception e){e.printStackTrace(); //打印异常信息}}};// output: 1501如果在上述方法中str="15er00";则在调用parseInt方法时候会产生NumberFormatException异常,见JDK API中对该方法的描述:public static int parseInt(String s) throws NumberFormatException将字符串参数作为有符号的十进制整数进行解析。
详解Java自动装箱与拆箱的实现原理

详解Java⾃动装箱与拆箱的实现原理什么是⾃动装箱和拆箱⾃动装箱就是Java⾃动将原始类型值转换成对应的对象,⽐如将int的变量转换成Integer对象,这个过程叫做装箱,反之将Integer对象转换成int类型值,这个过程叫做拆箱。
因为这⾥的装箱和拆箱是⾃动进⾏的⾮⼈为转换,所以就称作为⾃动装箱和拆箱。
原始类型byte, short, char, int, long, float, double 和 boolean 对应的封装类为Byte, Short, Character, Integer, Long, Float, Double, Boolean。
下⾯例⼦是⾃动装箱和拆箱带来的疑惑public class Test {public static void main(String[] args) {test();}public static void test() {int i = 40;int i0 = 40;Integer i1 = 40;Integer i2 = 40;Integer i3 = 0;Integer i4 = new Integer(40);Integer i5 = new Integer(40);Integer i6 = new Integer(0);Double d1=1.0;Double d2=1.0;System.out.println("i=i0\t" + (i == i0));System.out.println("i1=i2\t" + (i1 == i2));System.out.println("i1=i2+i3\t" + (i1 == i2 + i3));System.out.println("i4=i5\t" + (i4 == i5));System.out.println("i4=i5+i6\t" + (i4 == i5 + i6));System.out.println("d1=d2\t" + (d1==d2));System.out.println();}}请看下⾯的输出结果跟你预期的⼀样吗?输出的结果:i=i0 truei1=i2 truei1=i2+i3 truei4=i5 falsei4=i5+i6 trued1=d2 false为什么会这样?带着疑问继续往下看。
八大基本数据类型及包装类(装箱拆箱)

⼋⼤基本数据类型及包装类(装箱拆箱)⼀、⼋⼤基本数据类型 ⼋⼤基本数据类型包括:整数类型(byte、short、int、long),浮点类型(float、double),字符类型(char),布尔类型(boolean) byte:8位,占⽤空间为1字节,最多存储数据量是255,存放的数据范围为-128~127之间。
short:16位,占⽤空间为2字节,最⼤数据存储量为65536,数据范围为-32768~32767。
int:32位,占⽤空间为4字节,最⼤数据存储量为232-1,数据范围为-231~231-1。
long:64位,占⽤空间位8字节,最⼤数据存储量为264-1,数据范围为-263~263-1。
float:32位,占⽤空间为4字节,数据范围为3.4e45~1.4e38,直接赋值时必须在数字后加上f或F。
double:64位,占⽤空间为8字节,数据范围为4.9e324~1.8e308,赋值时可以加d或D,也可以不加。
boolean:占内存1字节,可存储true与false两个数值,分别表⽰逻辑的真与假。
char:16位,存储Unicode码,⽤单引号赋值。
范围从⼩到⼤依次为:byte、short、char、int、long、float、double⼆、包装类2.1 Java为每种基本数据类型分别设计了对应的类,称之为包装类。
基本数据类型对应的包装类byte Byteshort Shortint Integerlong Longchar Characterfloat Floatdouble Doubleboolean Boolean每个包装类的对象可以封装⼀个相应的基本数据类型的数据,并提供了其他⼀些有⽤的⽅法。
包装类对象⼀经创建,其内容不可改变。
基本数据类型与包装类的相互交换: 由基本数据类型向对应的包装类转换称为装箱,例如把int包装成integer类的对象。
由包装类相对应的基本数据类型转换称为拆箱,例如把integer类的对象重新简化为int。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Java包装类、拆箱和装箱详解
虽然Java 语言是典型的面向对象编程语言,但其中的八种基本数据类型并不支持面向对象编程,基本类型的数据不具备“对象”的特性——不携带属性、没有方法可调用。
沿用它们只是为了迎合人类根深蒂固的习惯,并的确能简单、有效地进行常规数据处理。
这种借助于非面向对象技术的做法有时也会带来不便,比如引用类型数据均继承了Object 类的特性,要转换为String 类型(经常有这种需要)时只要简单调用Object 类中定义的toString()即可,而基本数据类型转换为String 类型则要麻烦得多。
为解决此类问题,Java 为每种基本数据类型分别设计了对应的类,称之为包装类(Wrapper Classes),也有教材称为外覆类或数据类型类。
每个包装类的对象可以封装一个相应的基本类型的数据,并提供了其它一些有用的方法。
包装类对象一经创建,其内容(所封装的基本类型数据值)不可改变。
基本类型和对应的包装类可以相互装换:
∙由基本类型向对应的包装类转换称为装箱,例如把int 包装成Integer 类的对象;
∙包装类向对应的基本类型转换称为拆箱,例如把Integer 类的对象重新简化为int。
包装类的应用
八个包装类的使用比较相似,下面是常见的应用场景。
1) 实现int 和Integer 的相互转换
可以通过Integer 类的构造方法将int 装箱,通过Integer 类的intValue 方法将Integer 拆箱。
例如:
1.public class Demo {
2.public static void main(String[] args){
3.int m =500;
4. Integer obj =new Integer(m);// 手动装箱
5.int n = obj.intValue();// 手动拆箱
6. System.out.println("n = "+ n);
7.
8. Integer obj1 =new Integer(500);
9. System.out.println("obj 等价于 obj1?"+ obj.equals(obj1));
10. }
11.}
运行结果:
n = 500
obj 等价于obj1?true
2) 将字符串转换为整数
Integer 类有一个静态的paseInt() 方法,可以将字符串转换为整数,语法为:
1.parseInt(String s,int radix);
s 为要转换的字符串,radix 为进制,可选,默认为十进制。
下面的代码将会告诉你什么样的字符串可以转换为整数:
1.public class Demo {
2.public static void main(String[] args){
3. String str[]={"123","123abc","abc123","abcxyz"};
4.
5.for(String str1 : str){
6.try{
7.int m = Integer.parseInt(str1,10);
8. System.out.println(str1 +" 可以转换为整数 "+ m);
9.}catch(Exception e){
10. System.out.println(str1 +" 无法转换为整数");
11. }
12. }
13. }
14.}
运行结果:
123 可以转换为整数123
123abc 无法转换为整数
abc123 无法转换为整数
abcxyz 无法转换为整数
3) 将整数转换为字符串
Integer 类有一个静态的toString() 方法,可以将整数转换为字符串。
例如:
1.public class Demo {
2.public static void main(String[] args){
3.int m =500;
4. String s = Integer.toString(m);
5. System.out.println("s = "+ s);
6.}
7.}
运行结果:
s = 500
自动拆箱和装箱
上面的例子都需要手动实例化一个包装类,称为手动拆箱装箱。
Java 1.5(5.0) 之前必须手动拆箱装箱。
Java 1.5 之后可以自动拆箱装箱,也就是在进行基本数据类型和对应的包装类转换时,系统将自动进行,这将大大方便程序员的代码书写。
例如:
1.public class Demo {
2.public static void main(String[] args){
3.int m =500;
4. Integer obj = m;// 自动装箱
5.int n = obj;// 自动拆箱
6. System.out.println("n = "+ n);
7.
8. Integer obj1 =500;
9. System.out.println("obj 等价于 obj1?"+ obj.equals(obj1));
10. }
11.}
运行结果:
n = 500
obj 等价于obj1?true
自动拆箱装箱是常用的一个功能,读者需要重点掌握。