java基本数据类型以及它的包装类转换
前言:
java数据类型分为基本数据类型和他的对象类。java中有8个预定义的基本类型,每一个基本类型都有一个对应的对象包装类。基本类型基于值,对象类型基于引用。
1、Java的基本数据类型
1.1基本数据
类型有哪些,数据类型的取值范围
数据类型 | 内存大小 | 取值范围 |
---|---|---|
byte | 1 字节 | -128 ~ 127 |
short | 2 字节 | -2^15 ~ 2^15-1 |
char(无符号) | 2 字节 | 0 ~ 2^16-1 |
int | 4 字节 | -2^31 ~ 2^31-1 即:-2147483648 ~ 2147483647 |
float | 4 字节 | 1.4013E-45 ~ 3.4028E+38 |
long | 8 字节 | -2^63 ~ 2^63-1 |
double | 8 字节 | 4.9E-324 ~ 1.7977E+308 |
boolean | 1/8 字节(1字节) | true/false |
1.2基本数据类型转换
1.2.1自动类型转换
容量小的类型自动转换成容量大的数据类型
byte,short,char < int < long < float < double
-
byte,short,char之间不会互相转换,他们三个计算时首先转成int类型
如:
int a = 4 ;
double b = a ;
1.2.2 强制类型转换
容量大的类型转换成容量小的数据类型时,要加上强制转换符,但可能造成精度降低或溢出,使用时要格外注意。
如:
float f =14.8f;
int i = (int)f;
注意:boolean值不能与其他任何类型之间进行强制类型转换
关于Java基本类型的更多介绍,请见
https://wenku.baidu.com/view/c500cde5aeaad1f346933fdb.html
2、基本数据类型的包装类
Java是一种纯面向对象语言,但是java中有8种基本数据类型,破坏了java为纯面向对象的特征。为了承诺在java中一切皆对象,java又给每种基本数据类型分别匹配了一个类,这个类我们称之为包装类。
注意:每个基本数据类型都有一个与之匹配的包装类。
2.1 基本数据类型与其包装类
包装类的层次结构:
2.2 数据的装箱和拆箱
2.2.1 装箱和拆箱
装箱:把基本数据类型包装为对应的包装。基本数据类型和包装类比较,包装类会自动拆箱,可以相等不过地址不同
int a =12 ;
Inteager i = new Integer(a);//手动装箱的过程
Inteager i2 = new Integer(a);/
int b = i.intVable();//手动拆箱的过程
System.out.println(a==i);//true
System.out.println(i==i2);//false
- Integer i1 = new Integer(10); // 利用构造方法
- Integer i2 = Integer.valueOf(10); //利用包装类中的静态方法
拆箱:把包装类对象转换为对应的基本数据类型。
- int i3= i1.intValue(); //返回包装类对象i1对应的基本数据
2.2.2 自动装箱和自动拆箱
前面的装箱和拆箱操作,相对较麻烦。自jdk1.5开始,java增加的对基本数据类型的自动装箱和自动拆箱操作。java编译器在编译时期会根据源代码的语法来决定是否进行装箱或拆箱。
-
自动装箱:可以直接把一个基本数据类型赋值给包装类
例如: Double d = 3.3; //自动装箱操作int a =12; Inteager b=a;
特点:自动装箱通过Integer valueOf(a)
-
自动拆箱:可以直接把一个包装类对象,赋值给基本类型
例如:int a = new Integer(3); //自动拆箱。
自动装箱和自动拆箱,简化了对包装类的操作。
Integer aInteger = new Integer(12);
Integer bInteger = new Integer(12);
System.out.println(aInteger==bInteger);//false
Integer a1= new Integer(666);
Integer b1 = new Integer(666);
System.out.println(a1==b1);//false
Integer a2 = 12;
Integer b2 = 12;
System.out.println(a2==b2);//true 没有New
Integer a3= 666;
Integer b3 = 666;
System.out.println(a3==b3);//false超过了最大缓存限额可以查源码
Integer a4=Integer.valueOf(12);
Integer b4 =Integer.valueOf(12);
System.out.println(a4==b4);//true valueOf相当于不new直接装箱
Integer a5 = Integer.valueOf(666);
Integer b5 = Integer.valueOf(666);
System.out.println(a5==b5);//false超过了最大缓存限额可以查源码。
3.基本数据类型、包装类与String类之间的转换:
3.1. 其他类型转换成字符串
类类型向字符串转换正向转换:因为每个类都是object类的子类,而所有的object类都有一个toString()函数,所以通过toString()函数来转换即可
在String类中定义了一些静态的重载方法
public static String valueOf(…);
可以将基本类型数据、Object类型转换为字符串。如:
public static String valueOf(double d);//把double类型数据转成字符串
public static String valueOf(Object obj);//调用obj的toString()方法得到它的字符串表示形式。
还有一种最简单的方法:
-
把任意对象、基本数据类型与一个空字符串相连接则可以直接转换成字符串,与上面效果相同。
如:
int i = 18;
String str = i + "";
3.2. 字符串转化
public class JavaTest {
public static void main(String[] args) {
String iStr = “123”;
int testInt = Interger.parseInt(iStr); //将String类型的“123”转为了基本类型int的123.
String nStr = String.valueOf(100.234); //将double类型的100.234转为了String类型的“100.234”.
System.out.println(nStr);
}
}
3.2.String 与 char[] 的 转换
- char[] toCharArray();拷贝一份String中的所有字符。返回char[]
- new String(c);根据默认编码,将char[]转成String
- new String(value, offset, count);根据默认编码,将value(char[]),从offset(包含offset)位置开始,截取count个字符,转成String。
char[] ch = new char[] {'你','好','吗'};
String string = new String(ch);//将char[]转成string
String str= new String(ch,1,2);
System.out.println(str);//取值从某个位置开始
3.3.String 与 byte[] 的 转换
-
byte[] getBytes();根据系统默认的编码,得到字符串的byte[]。
系统默认编码是GBK,一个汉字占两个字节,第一个都是负数
-
byte[] getBytes(“UTF-8”);根据UTF-8编码, 得到的字符串的byte[]。
汉字占三个字节
-
new String(bytes);根据默认编码,将byte[]转成String。
以系统默认的格式编码,将byte[]转为String
new String(bytes,”UTF-8”);根据UTF-8编码,将byte[]转成String。
new String(bytes, offset, length);根据默认编码,将bytes(byte[]),从offset(包含offset)位置开始,取count个字节转成String。
new String(bytes, offset, length,”UTF-8”);根据UTF-8编码,将bytes(byte[]),从offset(包含offset)位置开始,取count个字节转成String。
String str = "中華";
byte[] bytes = str.getBytes();//String 转 byte[] 默认是GBK格式返回byte[]格式
System.out.println("bytes:"+bytes.length);
System.out.println(Arrays.toString(bytes));
byte[] bytes2 = str.getBytes("UTF-8");//以UTF-8进行转换,汉字占三个字节
System.out.println(Arrays.toString(bytes2));
byte[] bs = {-28, -72, -83, -24, -113, -81};
String str2= new String(bs);//以系统默认编码,将byte[]转为String
System.out.println(str2);
String str3 = new String(bs, "UTF-8");//以UTF-8格式转换为String
System.out.println(str3);
String str4 = new String(bs, 0,6);//以默认格式从第0位置到最后位置不包括
System.out.println(str4);