zoukankan      html  css  js  c++  java
  • java Object 类 与 Wrapper包装类

     Object类

    java.lang.Object类
    
    1. Object 类是所有java类的根父类
    2. 如果在类的声明中未使用extends关键字指明其父类,则默认父类为java.lang.Object类
    
    3. Object类中的功能(方法与属性)具有通用性
    
            属性: 无
            方法: equals() toString() getClass().....

    包装类

    什么是包装类?为什么需要包装类? 这是大家要了解的

    对于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 转化为基本数据类型和包装类 需要调用包装类的parseXX()方法

        //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);
    
        }
    转化 方法 演示
    基本数据转为Wrapper 直接调用Wrapper的构造器 Integer in= new  Integer(30);
    Wrapper--->基本数据类型 调用包装类的XXXValue()方法
    Integer integer = new Integer(34);
    int num = integer.intValue();
    基本数据,Wrapper--->String 调用String的valueOf()方法
    int num1 = 20;
    String strNum1 = String.valueOf(num1);
    String----->基本数据,Wrapper 调用包装类的paseXX()方法
    String str = "123";   
    Integer integerStr = Integer.parseInt(str);

    习题:

    如下两个题目输出结果相同吗?各是什么:
    

    1:

    Object o1 = true ? new Integer(1) : new Double(2.0);
    System.out.println(o1);//


    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: a: //false == 比引用地址 是否同一个对象 不是的
    b://true
    c:// false 因为Internet会把使用频繁的数字存到自己的地址值中 方便我们来调用避免重复调用,-128 ---- 127 这个范围内的 都是调用integer中的保存的都是同一个地址值 超过这个范围就不是同一个自地址值就是新建的了

     3:知识点:

        Integer内部定义了IntegerCache的结构 IntegerCache中定义了Integer[],
    保存了从-128 --- 127范围的整数,如果我们使用自动装箱的方式给Inte赋值的范围在
     -128 -- 127 的范围内时候就可以直接使用数组中的元素 不用去new了

    .

  • 相关阅读:
    HDU 5795
    HDU5783
    HDU 5791
    VK Cup 2016
    Codeforces Round #357 (Div. 2)
    Educational Codeforces Round 15
    HDU5724
    博弈学习 3
    Spring的多配置文件加载
    spring 核心技术
  • 原文地址:https://www.cnblogs.com/zhaoyunlong/p/11640600.html
Copyright © 2011-2022 走看看