Java中的8种基本数据类型及其包装类
Java中的8种基本数据类型及其包装类
1、8种基本数据类型基本知识
对于上图的注意事项:
1、java八种基本数据类型分为四类八种,四类分别为整型、浮点型、布尔型、字符型;八种分别为byte、short、int、long、float、double、boolean、char;
2、java八种基本数据类型的字节数:分别为1、2、4、8个字节;1字节(byte、boolean)、 2字节(short、char)、4字节(int、float)、8字节(long、double);
3、整数的默认类型为int,浮点数的默认类型为double;
4、八种基本数据类型的包装类:除了char的是Character、int类型的是Integer,其他都是首字母大写。
5、关于值的范围问题,需要注意char类型是无符号的,不能为负,所以是0开始的;
2、基本数据类型的转换
1.自动转换:低类型的向高类型的转换
如下图:顺着箭头的方向是可以自动转换的;
例:
int a = 2;
double b = 4;
System.out.println(a + b);//结果为6.0,运算时运算结果会向较大的类型转换
float c = 1.2f;
//c = c + 3.1;//编译错误,运算之后变为double类型
//byte、short、char三种数据类型参与运算时,先一律转化为int类型;
byte d = 1;
byte e = 2;
char f = 3;
//byte g = d +e;//编译错误,此处由于byte类型参与运算时,先直接转换为int类型
int h = d + e + f;
System.out.println(h);
2.强制转换:高类型的向底类型转换,但可能会数据溢出或者精度丢失
例:
// 高等级转为低等级的时候,必须强制转换,但实际工作中不推荐使用强制转换,可能会失精度或数据溢出;
int a = 128;
byte b = (byte)a;
System.out.println(b);//输出-128,出现了数据溢出
double c = 2.222;
int d = (int)c;
System.out.println(d);////输出1,精度丢失
3.八种基本数据类型的包装类
java是一门面向对象的语言,但是8中基本数据类型不具备面向对象的特征,所以实际使用中很不便所以为java八种基本数据类型提供了对应的包装类。
对应包装类比较特殊的就是int对应的Integer和char对应的Character;
对应包装类的直接父类:前6个由于是数,直接父类为Number,而后两个的直接父类就是Object类;
(1)常用方法一:静态方法 valueOf()
参数为基本数据类型,返回包装类对象;
参数为String字符串(Character类没有以String为 参数的该方法),返回包装类对象;
/*1.参数为基本数据类型
* 作用:将基本数据类型转换为对应包装类 */
Integer i = Integer.valueOf(1);
System.out.println(i);//输出10
/*2.参数为String字符串时,
* 作用:返回指定字符串值的包装类对象*/
Integer a = Integer.valueOf("10");
System.out.println(a);//输出10
Integer b = Integer.valueOf("10a");
System.out.println(b);//运行错误,字符串的值不少一个int类型的
(2)常用方法二:静态方法parseXXX(String str)
Character类没有该方法;
作用:将字符串装换为对应的基本数据类型(注意此处和上面的valueOf方法返回值的不同);
/*作用:将给定字符串装换为对应的基本数据类型
* 前提是该字符串必须正确描述该基本数据类型表示的值*/
int a=Integer.parseInt("10");
System.out.println(a);//输出10
int b=Integer.parseInt("10a");
System.out.println(b);//运行错误,字符串的值不为int类型
(3)常用方法三:非静态方法XXXValue()
因为是非静态方法,所以不能像上面两个方法用类名调用了;
数字类的包装类(八种包装类中父类是Number的的六个类)才有该方法;
/*作用:将包装类对象转换为对应的基本数据类型*/
Integer a=Integer.valueOf(100);//将基本数据类型转换为包装类对象
int b=a.intValue();//将包装类对象转换为对应的基本数据类型
System.out.println(b);//输出100
Double c=Double.valueOf(2.33);
double d=c.doubleValue();
System.out.println(d);
(4)自动拆箱与装箱
简介:jdk1.5之后的新特性。该特性是编译器认可的,是在编译器自动将基本数据类型和包装类相互转换,节省了麻烦。
自动拆箱 包装类——>基本数据类型 (原理是调用了xxxValue方法)
自动装箱 基本数据类型——>包装类 (原理是调用了valueOf方法)
/*自动装箱:valueOf*/
Integer i=1;//原理是 Integer i=Integer.valueOf(1);
/*自动拆箱*/
int i1=i+1;//原理是 int i1=i.intValue()+1;
Integer a=1;
Integer b=2;
Integer c=a+b;
/*原理为Integer c=Integer.valueOf(a.intValue()+b.intValue());*/