java数据类型以及它的转换

时间:2022-04-19 15:43:45

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类型

    java数据类型以及它的转换

如:

​ 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 基本数据类型与其包装类

java数据类型以及它的转换

包装类的层次结构:

java数据类型以及它的转换

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
  1. Integer i1 = new Integer(10); // 利用构造方法
  2. Integer i2 = Integer.valueOf(10); //利用包装类中的静态方法

拆箱:把包装类对象转换为对应的基本数据类型。

  1. int i3= i1.intValue(); //返回包装类对象i1对应的基本数据

2.2.2 自动装箱和自动拆箱

前面的装箱和拆箱操作,相对较麻烦。自jdk1.5开始,java增加的对基本数据类型的自动装箱和自动拆箱操作。java编译器在编译时期会根据源代码的语法来决定是否进行装箱或拆箱。

  1. 自动装箱:可以直接把一个基本数据类型赋值给包装类

    例如: Double d = 3.3; //自动装箱操作int a =12; Inteager b=a;

    特点:自动装箱通过Integer valueOf(a)

  2. 自动拆箱:可以直接把一个包装类对象,赋值给基本类型

    例如: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[] 的 转换

  1. char[] toCharArray();拷贝一份String中的所有字符。返回char[]
  2. new String(c);根据默认编码,将char[]转成String
  3. 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[] 的 转换

  1. byte[] getBytes();根据系统默认的编码,得到字符串的byte[]。

    系统默认编码是GBK,一个汉字占两个字节,第一个都是负数

  2. byte[] getBytes(“UTF-8”);根据UTF-8编码, 得到的字符串的byte[]。

    汉字占三个字节

  3. new String(bytes);根据默认编码,将byte[]转成String。

    以系统默认的格式编码,将byte[]转为String

  4. new String(bytes,”UTF-8”);根据UTF-8编码,将byte[]转成String。

  5. new String(bytes, offset, length);根据默认编码,将bytes(byte[]),从offset(包含offset)位置开始,取count个字节转成String。

  6. 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);