zoukankan      html  css  js  c++  java
  • Java学习_int和Integer的区别+包装类

    1.Java 中的数据类型分为基本数据类型和引用数据类型

      int是基本数据类型,Integer是引用数据类型;

      Ingeter是int的包装类,int的初值为0,Ingeter的初值为null。

    2.初始化

      int i =1;

      Integer i= new Integer(1);

      有了自动装箱和拆箱,使得对Integer类也可使用:Integer i= 1;  

    3.自动装箱和拆箱

    •  从Java5.0版本以后加入了autoboxing功能;
    •  自动“拆箱”和“装箱”是依靠JDK5的编译器在编译期的“预处理工作”。

      3.1 自动装箱:将基本数据类型封装为对象类型,成为一个对象以后就可以调用对象所声明的所有的方法。

    1 //声明一个Integer对象
    2 Integer num = 10;
    3 //以上的声明就是用到了自动的装箱:解析为
    4 Integer num = new Integer(10);

      3.2 自动拆箱:将对象重新转化为基本数据类型。

    1 //装箱
    2 Integer num = 10;
    3 //拆箱
    4 int num1 = num;

      自动拆箱有个很典型的用法就是在进行运算的时候:因为对象时不恩直接进行运算的,而是要转化为基本数据类型后才能进行加减乘除。

    Integer num = 10;
    //进行计算时隐含的有自动拆箱
    System.out.print(num--);

      进阶:

    //在-128~127 之外的数
    Integer num1 = 297;   Integer num2 = 297;           
    System.out.println("num1==num2: "+(num1==num2));                    
    // 在-128~127 之内的数 
    Integer num3 = 97;   Integer num4 = 97;   
    System.out.println("num3==num4: "+(num3==num4)); 

      打印的结果是:

        num1==num2: false   

        num3==num4:true 

      很奇怪吧:这就归结于java对于Integer与int的自动装箱与拆箱的设计,是一种模式:享元模式(flyweight)

      为了加大对简单数字的重利用,java定义:在自动装箱时对于值从–128到127之间的值,它们被装箱为Integer对象后,会存在内存中被重用,始终只存在一个对象

      而如果超过了从–128到127之间的值,被装箱后的Integer对象并不会被重用,即相当于每次装箱时都新建一个 Integer对象;

      以上的现象是由于使用了自动装箱所引起的,如果你没有使用自动装箱,而是跟一般类一样,用new来进行实例化,就会每次new就都一个新的对象;

      这个的自动装箱拆箱不仅在基本数据类型中有应用,在String类中也有应用,比如我们经常声明一个String对象时:

    1 String str = "sl";
    2 //代替下面的声明方式
    3 String str = new String("sl");

      4.包装类

      1)概述

    •   所有基本类型都有一个与之对应的类,即包装类;
    •   包装类是不可变类;  
    •   包装类是final的,不能定义他们的子类。

    基本数据类型

    包装类

    byte

    java.lang.Byte

    boolean

    java.lang.Boolean

    short

    java.lang.Short

    char

    java.lang.Character

    int

    java.lang.Integer

    long

    java.lang.Long

    float

    java.lang.Float

    double

    java.lang.Double

      提供包装类的原因:

      为了解决基本类型不能参与面向对象开发的问题。(为了在各种类型间转化,通过各种方法的调用。否则,你无法直接通过变量转化)。

      比如,现在int要转为String
         int a=0;
         String result=Integer.toString(a);
      在java中包装类,比较多的用途是用在于各种数据类型的转化中。
      以下是demo(来自落叶补充)

      //通过包装类来实现转化的

     1 int num=Integer.valueOf("12");
     2 int num2=Integer.parseInt("12");
     3                 
     4 double num3=Double.valueOf("12.2");
     5 double num4=Double.parseDouble("12.2");
     6 //其他的类似。通过基本数据类型的包装来的valueOf和parseXX来实现String转为XX
     7                 
     8 String a=String.valueOf("1234");//这里括号中几乎可以是任何类型
     9 String b=String.valueOf(true);
    10 String c=new Integer(12).toString();//通过包装类的toString()也可以
    11 String d=new Double(2.3).toString();

                                                       借鉴自:亮仔的博客

  • 相关阅读:
    Apache 虚拟主机 VirtualHost 配置
    EAX、ECX、EDX、EBX寄存器的作用
    Python中文文档 目录(转载)
    八度
    POJ 3268 Silver Cow Party (最短路)
    POJ 2253 Frogger (求每条路径中最大值的最小值,Dijkstra变形)
    2013金山西山居创意游戏程序挑战赛——复赛(1) HDU 4557 非诚勿扰 HDU 4558 剑侠情缘 HDU 4559 涂色游戏 HDU 4560 我是歌手
    HDU 4549 M斐波那契数列(矩阵快速幂+欧拉定理)
    UVA 11624 Fire! (简单图论基础)
    HDU 3534 Tree (树形DP)
  • 原文地址:https://www.cnblogs.com/hxliang/p/5454184.html
Copyright © 2011-2022 走看看