Java面向对象(六)

Java面向对象(六)

十九、包装类

19.1 八种基本类型包装类

java 提供了8种基本数据类型对应的包装类,使得基本数据类型的变量具有类的特征。

19.2 基本类型、包装类与 String 类间的转换。

19.3 基本数据类型转换为包装类(装箱)

public void test1(){
	public static void main(String[] args){
        	
		int num1 = 10;
//		System.out.println(num1.toString());		报错
		Integer in1 = new Integer(num1);			//通过构造器装箱
		System.out.println(in1.toString());
		
		Integer in2 = new Integer("123");			//通过字符串参数装箱
		System.out.println(in2.toString());
    
		
		//报异常
//		Integer in3 = new Integer("123abc");
//		System.out.println(in3.toString());
		
		Float f1 = new Float(12.3f);				//通过构造器装箱
		Float f2 = new Float("12.3");				//通过字符串参数装箱
		System.out.println(f1);
		System.out.println(f2);
		
		Boolean b1 = new Boolean(true);
		Boolean b2 = new Boolean("TrUe");
		System.out.println(b2);						//true
/*		b2 返回 true 原因:
   		public Boolean(String s) {
        	this(parseBoolean(s));
    	}
    	
		public static boolean parseBoolean(String s) {
        	return ((s != null) && s.equalsIgnoreCase("true"));
    	}
    	
		equalsIgnoreCase() 方法用于将字符串与指定的对象比较,不考虑大小写。
		如果给定对象与字符串相等,则返回 true,否则返回 false。
*/
		Boolean b3 = new Boolean("true123");
		System.out.println(b3);						//false	
		
		Order order = new Order();
		System.out.println(order.isMale);			//false(基本数据类型默认值)
		System.out.println(order.isFemale);			//null(引用数据类型默认值)

    }
}

class Order{
	boolean isMale;
	Boolean isFemale;
}

19.4 包装类转换为基本数据类型(拆箱)

public void test2(){
    public static void main(String[] args){
		
        Integer in1 = new Integer(12);
		
		int i1 = in1.intValue();			//调用类方法xxxValue()
		System.out.println(i1 + 1);			// 13
		
		
		Float f1 = new Float(12.3);
		float f2 = f1.floatValue();			//调用类方法xxxValue()
		System.out.println(f2 + 1);			// 13.3
    }
}

19.5 自动装箱拆箱

//	JDK 5.0 新特性:自动装箱 与自动拆箱
public void test3(){

		int num1 = 10;
		Integer in1 = num1;	//自动装箱
		
		boolean b1 = true;
		Boolean b2 = b1;	//自动装箱
		
		System.out.println(in1.toString());
    
		int num3 = in1;		//自动拆箱
		
}

19.6 基本数据类型、包装类转换为String类型

// String类型:调用String重载的valueOf(Xxx xxx)
public void test4(){
	public static void main(String[] args){	
		int num1 = 10;
		//方式1:连接运算
		String str1 = num1 + "";
        
		//方式2:调用String的valueOf(Xxx xxx)
		float f1 = 12.3f;
		String str2 = String.valueOf(f1);	
		
		Double d1 = new Double(12.4);
		String str3 = String.valueOf(d1);
		System.out.println(str2);			//"12.3"
		System.out.println(str3);			//"12.4"
    }	
}

19.7 String类型转换为基本数据类型、包装类

// 调用包装类的parseXxx(String s)
public void test5(){
	public static void main(String[] args){
        
		String str1 = "123";
		//错误的情况:
//		int num1 = (int)str1;
//		Integer in1 = (Integer)str1;
		
		int num2 = Integer.parseInt(str1);
        //当字符串中不是纯数字时,可能会报NumberFormatException
		System.out.println(num2 + 1);
		
		String str2 = "true1";
		boolean b1 = Boolean.parseBoolean(str2);
		System.out.println(b1);		//false
    }
}

19.8 特殊例子

public void test6(){
	public static void main(String[] args){
        
		Object o1 = true ? new Integer(1) : new Double(2.0);
		System.out.println(o1);
        //	输出 1.0,三元运算符要求两边表达式数据类型一致,左边 Integer 类型自动类型转换为 Double       
        
    }
}
public void method1() {
    public static void main(String[] args){
		Integer i = new Integer(1);
		Integer j = new Integer(1);
		System.out.println(i == j);		//false
		Integer m = 1;
		Integer n = 1;
		System.out.println(m == n);		//true
		Integer x = 128;				//相当于new了一个Integer对象
		Integer y = 128;				//相当于new了一个Integer对象
		System.out.println(x == y);		//false
    }
}
/*
	Integer内部定义了IntegerCache结构,IntegerCache中定义了Integer[],保存了从-128~127范围的整数。如果我们使用自动装箱的方式,给Integer赋值的范围在-128~127范围内时,可以直接使用数组中的元素,不用再去new了。
	目的:提高效率
	详细可以看 Integer 源码
*/
posted @ 2022-07-14 23:13  小钊丶  阅读(55)  评论(0编辑  收藏  举报