zoukankan      html  css  js  c++  java
  • 包装类

    包装类

    java.lang.*是为了给对应着的基本类型, 提供丰富的功能

    对应关系

    基本类型 包装类 父类
    byte Byte Number
    short Short Number
    int Integer Number
    long Long Number
    float Float Number
    double Double Number
    boolean Boolean Object
    char Character Object

    包装类常用方法

    所有包装类的方法都大同小异, 熟练了一个, 其他都是这个模板

    这里以Integer为例:

    构造方法

    Integer(int value) 构造一个新分配的 Integer对象,该对象表示指定的 int值。
    Integer(String s) 构造一个新分配 Integer对象,表示 int由指示值 String参数。

    常用静态方法

    返回值 方法 说明
    int intValue() Integer转为int类型(拆箱)
    其他包装类的方法名字例如: DoubleValue()
    Integer valueOf(int i) int类型转为Integer(装箱)
    int parseInt(String str) 将一个String转为int类型的十进制数

    自动拆箱装箱

    // 自动装箱
    Integer a = 100; 
    // Integer a = new Integer(100); //  不推荐使用
    
    // 自动拆箱
    int b = a;
    

    创建方式对比

    Integer in = new Integer(2);
    Integer in2 = Integer.valueOf(2);// 高效, 如果是相同的数据, 则不会开辟新的空间, 但是有特殊情况, 请见下面的Integer缓存
    

    验证

    Integer in2 = Integer.valueOf(2);
    Integer in3 = Integer.valueOf(2);
    System.out.println(in2 == in3); // 结果: true
    

    由此可见, 使用valueOf()如果存在相同的数据, 则不会开辟新的空间, 建议使用!

    Integer的缓存

    Integer里有一个缓存空间(源码中可见, 是一个缓存数组), 范围是一个字节的范围, 即-128~127, 上面创建方式对比说到Integer in2 = Integer.valueOf(2);高效, 是因为 如果是相同的数据, 则不会开辟新的空间. 但是如果范围超出了这个缓存范围, 那么还是会开辟新的空间的

    代码示例:

    Integer x1 = 127;
    Integer x2 = 127;
    
    Integer x3 = 128;
    Integer x4 = 128;
    
    System.out.println(x1 == x2);
    System.out.println(x3 == x4);
    
    // 或者你可以这么写(等效上面的写法)
    // Integer x1 = Integer.valueOf(127);
    // Integer x2 = Integer.valueOf(127);
    
    // Integer x3 = Integer.valueOf(128);
    // Integer x4 = Integer.valueOf(128);
    
    // System.out.println(x1 == x2);
    // System.out.println(x3 == x4);
    

    运行结果:

    true
    false
    

    所以, 当使用==比较Integer时, 可能会出现意外的结果, 所以推荐使用Inteherequals()进行比较

  • 相关阅读:
    2016-12-7
    使用netty4.x客户端接收较大数据量报文时发生的读取不完整bug修复记录
    AngularJS
    使用Netty收发二进制报文问题记
    如何在Linux中查看所有正在运行的进程
    面试连环炮系列(十四): HTTP状态码302的跳转逻辑
    算法天天练1:计算最长子串
    面试连环炮系列(十三):实现一个线程有几种方法
    面试连环炮系列(十二):说说Atomiclnteger的使用场景
    面试连环炮系列(十一):说说你们的分布式ID设计方案
  • 原文地址:https://www.cnblogs.com/zpKang/p/12899858.html
Copyright © 2011-2022 走看看