java Wrapper包装类
? 什么是包装类?为什么需要包装类? 这是大家要了解的 对于java中的基本数据类型我们如果想要把当当做类来使用怎么办呢? 如果想要对这些基本数据类型直接调用一些方法来操作的话 怎么做呢? 由以上就产生了Wrapper包装类(这在python中叫装饰器) 包装类作用: java提供了8种基本数据类型的对应的包装类,使得基本数据类型的变量有了类的特征 1: 是针对八种基本数据类型定义的相应的引用数据类型---包装类(封装类) 2: 有了类的特征就可以调用类的方法 3: 我们希望java的基本数据类型也有java面向对象的特殊所以定义了 包装类 把基本数据类型的特殊都封装在对应的类中 ? ? ? ? 基本数据---->Wrapper 基本数据类型转化为包装类:调用包装类的构造器 ? // 基本数据转化为Wrapper : 直接调用包装类的构造器即可 public void testOne() { int num1 = 10; Integer integer = new Integer(num1); System.out.println("基本数据转化为包装类的结果:" + integer); Float f = new Float(3.5); System.out.println(f); } ? Wrapper ---> 基本数据 Wrapper 转化为基本数据类型: 调用Wrapper包装类的? XXValue()方法 //Wrapper 转化为 基本数据 : 直接调用XXValue() 方法 public void WrapperToBasic() { Integer integer = new Integer(34); int num = integer.intValue(); System.out.println("Wrapper--->基本数据:"+num); Float f = new Float(4.6f); float fl = f.floatValue(); System.out.println("Float ----> 基本数据类型:"+fl); } ? 基本数据,Wrapper----> String 基本数据和包装类转化为String : 调用String重载的valueOf()方法 //基本数据,Wrapper ---> String : 基本数据和包装类转化为String 直接调用String的valueOf()方法 public void basicWrapperToString() { //方法一直接转化 int num = 10; System.out.println("这是num" + num); //直接加减 //方法二调用String的valueOf() int num1 = 20; String strNum1 = String.valueOf(num1); System.out.println("基本数据转化为String:"+strNum1); Integer integer = new Integer(35); String strInteger = String.valueOf(integer); } ? ? String ---> 基本数据类型,Wrapper String 转化为基本数据类型和包装类 需要调用包装类的paseXX()方法 //String ---> 基本数据,Wrapper : 调用包装类的paseXX public void StringToBsicsWrapper() { String str = "123"; //必须是转化的对应类型的字符,转为int那么久必须是字符串类型的int Integer integerStr = Integer.parseInt(str); System.out.println(integerStr); } ? ? 错误的 public void StringToBsicsWrapper() { String str = "老王"; Integer integerStr = Integer.parseInt(str); //这样是错误的 因为你要转化为int那么String就要是字符串类型的int "123" System.out.println(integerStr); } ? 装箱子: //装箱子: 转化为String //需要先把对应的信息转化为包装类 有了类的特征就可以调用类的方法了 public void pack(){ int num = 30; Integer integer = new Integer(num); String str = integer.toString(); System.out.println("pack:"+str); } ? ? ?
? ? 习题: 如下两个题目输出结果相同吗?各是什么:
1: Object o1 = true ? new Integer(1) : new Double(2.0); ? 2: public void test() { Object o2; if (true) o2 = new Integer(1); else o2 = new Double(2.0); System.out.println(o2);// } ? ? 3: public void method1() { Integer i = new Integer(1); Integer j = new Integer(1); System.out.println(i == j); Integer m = 1; Integer n = 1; System.out.println(m == n); Integer x = 128; Integer y = 128; System.out.println(x == y); } ? 解答: 习题1: 答案是:1.0 因为 // 因为在编译的时候int 和dubbo会自动对类型提升为dubbo的 所以结果是1.0 习题2: 答案:1 因为没有进行对比只是赋值 ? ?3:知识点: Integer内部定义了IntegerCache的结构 IntegerCache中定义了Integer[],保存了从-128 --- 127范围的整数,如果我们使用自动装箱的方式给Inte赋值的范围在 -128 -- 127 的范围内时候就可以直接使用数组中的元素 不用去new了 ? ? ? ? ? ? ? . (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |