目录
一.包装类
二.类成员
1.概念:8种基本数据类型对应的引用类型
2.类名:Integer,Character...
3.使用:(已过时,可以自动装箱)
Integer n=new Integer(100);
Integer n1=Integer.valueOf(100);
取值可通过intValue()实例方法取值,n1.intValue();
4.自动装箱Autoboxing
一个基本类型变量可以直接赋给对应的包装类变量/Object变量
自动拆箱AutoUnboxing
允许直接把包装类对象赋给对应的基本类型
Integer n3=127;//自动装箱
int it=n3;//自动拆箱
5.包装类实现基本类型和字符串类型之间的转换
通过类方法
int n1=Integer.parseInt("100");
int n2=Integer.ValueOf("100");
String s1=String.valueOf(100);
String s2=n1+"";//空字符串连接
6.比较
①包装类实例与数值类型为值比较
②包装类型实例间的比较为地址比较
e.g. 两个较小的等值的Integer实例,==为true(一般为-128~127,可变);
两个较大的等值实例比较,==为false
这是因为 缓存 系统会将-128~127间的整数自动装箱成Integer实例,放入cache数组。此后,若要将一个-128~127间的整数自动装箱时,实例变量实际指向对应的cache数组元素。范围外的,会建立一个新的实例。
#自动装箱,Integer.valueOf(), parseInt() 均优先返回缓存实例
③静态方法compare(xxx val1,xxx val2),比较包装类值大小,返回1,0,-1
public class Main {
public static void main(String[] args) {
Integer n1=Integer.valueOf(100);
Integer n2=Integer.valueOf("100");
Integer n = new Integer(100);
System.out.println(n1==n2);//由于缓存机制,地址相同
System.out.println(n==n1);//地址不同
Integer n3=127;//自动装箱
Integer n4=127;
System.out.println(n3==n4);//true
Integer n5=Integer.parseInt("100");
System.out.println(n1==n5);//true
System.out.println(Integer.compare(n1,n3));//-1
}
}
7.包装类的意义
解决了8种基本类型不能被当作Object类型使用的问题
1.java类只能包含 成员变量,方法,构造器,初始化块,内部类(包括枚举,接口)5种成员
2.null实例也可以访问类成员(static修饰),但无法访问实例变量,实例方法
3.单例类
一个类始终只能创建一个实例,被称为单例类
①将构造器隐藏,private修饰
②定义一个public static方法用于创建对象
③在创建时,判断是否已经存在了一个对象,用一个类变量缓存实例
public class Main {
public static void main(String[] args) {
System.out.println("Hello world!");
Singleton ins1=Singleton.getInstance();
Singleton ins2=Singleton.getInstance();
System.out.println(ins1==ins2);
}
}
class Singleton{
private static Singleton instance;
private Singleton(){
}
public static Singleton getInstance(){
if(instance==null){
instance=new Singleton();
}
return instance;
}
}
4.意义
在一些特殊场景下,不允许自由创建该类对象,只允许为该类创建一个对象。