包装(封装)类:
类,对应着8种基本数据类型设计的
java是一种面向对象的语言,之前学过8种基本数据类型,但没有提过过有对象,但有时候往往需要用这种对象。如"123"-->123,无法通过强转获得。(123-->"123"可以)
//将123-->"123"(自动类型转换)
jshell> int a = 123
a ==> 123jshell> a + ""
$2 ==> "123"
//将"123"-->123
jshell> String b = "123"
b ==> "123"jshell> (int)b
| 错误:
| 不兼容的类型: java.lang.String无法转换为int
| (int)b
java为了解决这样一系列对于基本数据类型更强大的功能操作,专门包装了8个数据类型对应的对象。是对象就有类,有类有属性,有方法。如
//返回当前类型的最大值
jshell> Byte.MAX_VALUE
$6 ==> 127
//返回当前类型的最小值
jshell> Byte.MIN_VALUE
$7 ==> -128
jshell> Integer.parseInt("123")
$4 ==> 123
jshell> Double.parseDouble("3.141592653574")
$5 ==> 3.141592653574
8种数据类型对应8种包装类:
byte Byte
short Short
int Integer
long Long
boolean Boolean
float Float
double Double
char Character
下面以Integer为例讲解。
有了包装类,基本数据类型的功能得的了非常大强化和扩展。
注意: 包装类和基本数据类型不是一个东西。
包装类是对象(对象是在堆中,有地址)。基本数据类型是常量(常量池中)
- package com.openlab.day14;
-
- public class TestWrapper {
-
- public static void main(String[] args) {
- Integer i = new Integer(123);
- int ii = 123;
- System.out.println(i == ii);
- //false(在jdk9之前,之后过时) -128~127为true
- System.out.println(i.equals(ii));//通过这种方式去判断
- }
-
- }
但是我们可以认为是一种东西
Integer a = 1000;
int b = 1000;
拆箱和装箱功能
拆箱:将包装类的对象转换为基本数据类型 Integer i = 100; ==> int ii = i;
装箱:将基本数据类型包装为包装类 double a = 3.14 ==> Double b = a;
在jdk5.0之前,拆装箱,必须调用对应的方法来来完成
Integer i = 100;
int ii = i.intValue(); // 拆箱
在jdk5.0之后,所有的所有的拆箱和装箱功能会自动完成。
int a = 10;
Integer b = new Integer(a); // 9以及之后版本过时了,不建议使用Integer bb = Integer.valueof(a); // 建议使用这个方法。静态方法。传基本数据类型,包装成包装类
Integer i = new Integer(123);
int ii = 123;
System.out.println(i == ii);//jdk5.0之后这种方法也可以直接判断(做了自动拆装箱,转化成int去进行判断)
System.out.println(i.intValue() == ii);//jdk5.0之前,需要手动
- package com.openlab.day14;
-
- public class TestWrapper {
-
- public static void main(String[] args) {
- Integer i = new Integer(123);
- int ii = 123;
- //System.out.println(i == ii);
- //false(在jdk9之前,之后过时) -128~127为true
- System.out.println(i.equals(ii));//通过这种方式去判断
-
-
- Integer a = 1000;
- Integer b = 1000;
- System.out.println(a == b);
- }
- }
将a和b 的值变动
- package com.openlab.day14;
-
- public class TestWrapper {
-
- public static void main(String[] args) {
- Integer i = new Integer(123);
- int ii = 123;
- //System.out.println(i == ii);
- //false(在jdk9之前,之后过时) -128~127为true
- System.out.println(i.equals(ii));//通过这种方式去判断
- //java内存管理中,小整形缓冲区(在方法区中)(将-128~127存储了下来,一旦声明的数字在这个范围,默认从小整形缓冲区取)
-
- Integer a = 127;
- Integer b = 127;
- System.out.println(a == b);
- }
- }
java内存管理中,小整形缓冲区(在方法区中)(将-128~127存储了下来,一旦声明的数字在这个范围,默认从小整形缓冲区取)