Java包装类
一.什么是包装类
Java中的基本数据类型没有方法和属性,而包装类就是为了让这些拥有方法和属性,实现对象化交互。
数值型包装类都继承至Number,而字符型和布尔型继承至Object。
二.基本数据和包装类之间的转换
装箱:基本数据类型转换为包装类;
拆箱:包装类转换为基本数据类型。
1 package com.swpu; 2 3 public class WrapperTestOne { 4 public static void main(String[] args){ 5 //1.自动装箱 6 int t1=1; 7 Integer t2=t1; 8 //2.手动装箱 9 Integer t3=new Integer(t1); 10 System.out.println("int类型t1="+t1); 11 System.out.println("自动装箱,Integer类型对象t2="+t2); 12 System.out.println("手动装箱,Integer类型t3="+t3); 13 14 15 //1.自动拆箱 16 int t4=t2; 17 //2.手动拆箱 18 //通过intValue()方法返回int值,还可以利用其他方法装换为其他类型 19 int t5=t2.intValue(); 20 System.out.println("自动拆箱,int型t4="+t4); 21 System.out.println("手动拆箱,int型t5="+t5); 22 } 23 24 }
三.基本数据类型和包装类的转换
通过包装类Integer.toString()将整型转换为字符串;
通过Integer.parseInt()将字符串转换为int类型;
通过valueOf()方法把字符串转换为包装类然后通过自动拆箱。
1 package com.swpu; 2 3 public class WrapperTestTwo { 4 5 public static void main(String[] args) { 6 // TODO Auto-generated method stub 7 //基本数据类型转换为字符串 8 int t1=12; 9 String t2=Integer.toString(t1); 10 System.out.println("int转换为String:"+t2); 11 //字符串转换为基本数据类型 12 //通过paerInt方法 13 int t3=Integer.parseInt(t2); 14 //通过valeOf,先把字符串转换为包装类然后通过自动拆箱 15 int t4=Integer.valueOf(t2); 16 System.out.println("t3:"+t3); 17 System.out.println("t4:"+t4); 18 19 } 20 21 }
四.包装类知识
包装类对象的初始值为null(是一个对象);
包装类对象之间的比较:
1 package com.swpu; 2 3 public class WrapperTestTre { 4 5 public static void main(String[] args) { 6 // TODO Auto-generated method stub 7 Integer one=new Integer(100); 8 Integer two=new Integer(100); 9 //one和对two是两个不同的对象,==在比较对象时比较的是内存地址,两个是不同的空间,放的值相同 10 System.out.println("one==two:"+(one==two)); 11 Integer three=100;//自动装箱 12 /* Integer three=Integer.valueOf(100); 13 * 这时缓存区没有,就会构造一个 14 */ 15 System.out.println("three==100:"+(three==100));//自动拆箱 16 Integer four=100; 17 /*实际执行的是 Integer four=Integer.valueOf(100); 这时缓存区有,就会直接取 18 * Java为了提高拆装箱效率,在执行过程中提供了一个缓存区(对象池)【类似于常量数组】, 19 * 如果传入的参数是,-128<参数<127会直接去缓存查找数据,如果有久直接产生,如果没有就隐式调用new方法产生 20 */ 21 22 System.out.println("three==four:"+(three==four)); 23 Integer five=200; 24 System.out.println("five==200:"+(five==200)); 25 Integer six=200; 26 //注:这里为200,超出了缓存区范围,所以都需要构建 27 System.out.println("five==six:"+(five==six)); 28 /* 29 * 输出: 30 * one==two:false 31 three==100:true 32 three==four:true 33 five==200:true 34 five==six:false 35 36 */ 37 } 38 39 }
注:
Java中除了float和double的其他基本数据类型,都有常量池(注:Python中int【-5~256,257 这个整数对象是区分作用域的,它只有在相同的作用域, 内存地址才会相同
】,str,byte也有)