基本数据类型与包装数据类型JAVA
概述
基本数据类型 | 对应包装数据类型 |
---|---|
byte | Byte |
short | Short |
int | Integer |
long | Long |
float | Float |
double | double |
char | Character |
boolean | Boolean |
基本数据类型与对应包装类型的转换
基本数据类型→包装数据类型:装箱(以int为例)
- 通过构造器进行装箱
Integer(int value)
Integer num1 = new Integer(123);
System.out.println(num1);
- 通过包装类的静态方法
valueOf(int value)
Integer num2 = Integer.valueOf(456);
System.out.println(num2);
包装数据类型→基本数据类型:拆箱
1.通过包装类型的实例方法。
public xxx xxxValue() 注:xxx表示基本数据类型
int num3 = num1.intValue();
System.out.println(num3);
自动装箱与拆箱
自动装箱和拆箱是JAVA5.0之后出来的特性。
- 自动装箱:JVM自动将一个基本数据类型变成一个包装数据类型
Integer num1 = 1125;
- 自动拆箱:JVM自动将一个包装类型变成一个基本数据类型
int num2 = num1;
int num3 = new Integer(123);
基本数据类型和字符串之间的转换
基本数据类型→字符串类型
- 直接通过加法拼接(推荐)
String num1 = 123 + "";
- 将基本数据类型转化为包装数据类型,然后通过包装数据类型的tostring方法进行相应的调用
// 通过Integer实例方法toString
String num2 = Integer.valueOf(123).toString();
// 通过Integer静态方法toString
String num3 = Integer.toString(123);
- 通过String类中的静态方法valueOf(int)进行调用
String num4 = String.valueOf(123);
字符串类型→基本数据类型
- 通过包装类型的构造器,在进行自动拆箱
int num05 = new Integer("314");
System.out.println(num05);
2.通过包装类型的静态方法static xxx parseXxx(String s) (推荐)
xxx表示基本数据类型
int num06 = Integer.parseInt("123");
System.out.println(num06);
除了Character类之外,其他所有包装类都具有parseXxx静态方法可以将字符串参数转换为对应的基本
类型:
- public static byte parseByte(String s) :将字符串参数转换为对应的byte基本类型。
- public static short parseShort(String s) :将字符串参数转换为对应的short基本类型。
- public static int parseInt(String s) :将字符串参数转换为对应的int基本类型。
- public static long parseLong(String s) :将字符串参数转换为对应的long基本类型。
- public static float parseFloat(String s) :将字符串参数转换为对应的float基本类型。
- public static double parseDouble(String s) :将字符串参数转换为对应的double基本类型。
- public static boolean parseBoolean(String s) :将字符串参数转换为对应的boolean基本类型。
By the way(可以跳过)
char[] ch = {'a','b','c'};
System.out.println(ch);//abc
System.out.println(new int[3]);//[I@15db9742
System.out.println(ch.toString());//[C@6d06d69c
打印char的时候可以发现在pirintln中直接输入字符数组的时候打印的是字符数组的内容,而打印ch.toString的时候是虚拟地址值。
同样在在打印int类型的数组的时候确实打印地址值。
为什么会造成这种现象?
通过查看println的源码可以发现
printfln方法专门给char[]数组提供了一个方法,用来打印char类型的数组。
而其他类型数组就通过println(Object)方法进行调用。
基本数据类型和引用数据类型的比较
- 比较基本数据类型的时候,比较的是数据值
int num01 = 100;
int num02 = 100;
System.out.println(num01 == num02);// true
- 比较引用数据类型的时候,比较的是地址值
Integer num03= new Integer(200);
Integer num04= new Integer(200);
System.out.println(num03 == num04); //false
Integer num05 = 300;
Integer num06 = 300;
System.out.println(num05 == num06);//false
包装类型在常量池储存的情况
接上面的章节
我们可以看到一个神奇的事情
Integer num07 = 100;
Integer num08 = 100;
System.out.println(num07 == num08); //true
在JVM虚拟机中,在堆空间中有一片区域叫做常量池,里面通过数据分析收集了开发人员在写代码时使用频率非常高的常量。
其原因就是为了节省内存空间与提高运行效率
在常量池中有
整数类型:byte,short,int,long。包装类型为Byte,Short,Integer,Long
浮点类型:float、double。包装类型为Float,Double
字符类型:char。包装类型为Character
布尔类型:boolean。包装类型为Boolean
还有一个null
其中不存在Float与Double
对于包装类型为整形来说,其范围只有-128-127 。
而Character只存在ASCII码表。
Character num05 = '赵';
Character num06 = '赵';
System.out.println(num05 == num06);//false