包装类
1.1 包装类概述
基本数据类型值对应的引用数据类型称为包装类。
由于我们的基本数据类型是不作为对象使用的,但是很多时候会用到对象作为参数,Java提供了包装类将基本数据类型包装为一个对象。
每个基本数据类型都有对应的包装类,默认值为null
byte——Byte Byte类将基本类型byte的值包装在一个对象中
short——Short
int——Integer
long——Long
float——Float
double——Double
char——Charactar
boolean——Boolean
除了int、char之外,其他基本类型的包装类与对应的基本数据类型名是一样的,且首字母均为大写。
1.2 类型转换之装箱、拆箱
我们先对装箱、拆箱进行内存分析:
1.2.1 类型转换之装箱
装箱即将基本类型转换为引用类型。
我们以int类型为例作为示范
int类型的包装类为Integer类;如何将int类型转为Integer类型呢?
-
方法一:通过Integer类的构造方法:
Integer(int value)
-
方法二:通过Integer类的valueOf方法(静态方法)将int类的值作为参数即可实现:
valueOf(int i)
public class Test{
public static void main(String[] args){
int a=10;
Integer i1=new Integer(a);//通过Integer的构造器传参来实现装箱
Integer i2=Integer.valueOf(a);//调用Integer.valueOf方法,返回一个 Integer指定的 int值的 Integer实例
Integer i3=Integer.valueOf(10);
}
}
1.2.2 类型转换之拆箱
拆箱即将引用类型转为基本类型
我们以int类型为例作为示范
- 通过Integer类的intValue方法(非静态方法,为实例所用):
intValue()
:将Integer
的值作为int
public class Test{
public static void main(String[] args){
int a=10;
Integer i2=Integer.valueOf(a);//调用Integer.valueOf方法实现基本类型的装箱
int a1=i2.intValue();//通过Integer实例对象调用intValue方法进行拆箱
}
}
1.2.3 自动装箱、拆箱
JDK1.5 之后便支持自动装箱、拆箱
public class Test{
public static void main(String[] args){
int a=10;
Integer i2=a;//自动装箱
int b=i2;//自动拆箱
}
}
1.3 类型之间的相互转换
基本类型与字符串可以进行相互转换;
我们以int类型和String类型之间转换为例
public class Test{
public static void main(String[] args){
//int类型转为String类型
int a=10;
//第一种方式:通过+号
String st1=a+" ";
System.out.println(st1);//10
//第二种方式:(静态方法)toString(); 通过int包装类调用来实现转型
String st2=Integer.toString(a);
System.out.println(st2);//10
//拓展
//int包装类中toString();重载方法 可以计算整数类型的不同进制下的值
//计算16在十六进制前的值
System.out.println(Integer.toString(16));//10
//字符串转为int类型
String st3="19971007";
//此时为字符串形式; 注意如果字符串要转为int型,那么他的字符串内容一定只能是int型的,否则抛出异常NumberFormatException
//转型方法:Integer.paseInt(); 静态方法 转什么型用什么型的包装类进行调用方法
int a3=Integer.parseInt(st3);
System.out.println(a3);//19971007
//拓展
/*字符串转为基本类型中,boolean型是比较特殊的,因为boolean型的值只有ture以及false,
当我们将字符串进行转型的时候,只有字符串的内容为"true"时才会转为"true",当字符串中内容为false,或者说是为非true时,转回来时均为false
*/
String st4="true";
String st5-="工地佬"
boolean b=Boolean.paseBoolean(st4);
System.out.println(b);//true.
System.out.println(Boolean.paseBooleam(st5));//false
}
}
1.4 整数缓冲区
在整数包装类中valueOf方法创建的实例可被享用,整数区间值在-128-127;一旦超出范围,将不再共享。
public class Test{
public static void main(String[] args){
//通过构造方法实例的包装类对象是独立的,不会共享
Integer i1=new Integer(10);
Integer i2=new Integer(10);
System.out.println(i1==i2);//false
//"=="对于基本类型而言比较的是值,对于引用类型而言对比的是堆内存地址;i1和i2均是new出来的,内存地址必然不同,也就不会相等!
//通过valueOf实例的对象在整数缓冲区是会共享的
Integer a=Integer.valueOf(88);
Integer b=Integer.valueOf(88);
Integer c=Integer.valueOf(200);
Integer d=Integer.valueOf(200);
System.out.println(a==b);//true 88在valueOf的整数缓冲区内,对象共享
System.out.println(c==d);//false 200不在valueOf的整数缓冲区内,便会新建堆内存,则内存地址也就不一致了,自然不会相等!
}
}
标签:String,包装,valueOf,Day32,int,详解,类型,Integer
From: https://www.cnblogs.com/CQliuwei/p/16953886.html