zoukankan      html  css  js  c++  java
  • Java 常用工具类之基本对象包装类

    为了方便操作基本数据类型值, 将其包装成对象, 在对象中定义了属性和行为, 丰富了该数据的操作.
    用于描述该对象的类就称为基本数据类型对象包装类.

    基本数据类型对应关系

    基本数据类型(8种) 包装类
    byte Byte
    short Short
    int Integer
    long Long
    float Float
    double Double
    char Character
    boolean Boolean

    常用操作之一: 用于基本数据类型和字符串之间的转换

    1. 基本类型转换为字符串方法:
        1. 基本类型数值 + "";
        2. 使用 String 类中的静态方法 valueOf(基本类型数值);
        3. 使用 Integer 类中的静态方法 valueOf(基本类型数值);
    
    2. 字符串转换为基本类型
        1. 使用包装类中的静态方法 `xxx  parseXxx("xxx类型的字符串");`
    
            ```
            int a = Integer.parseInt("234"); // 直接使用类名调用对应方法
            int parseInt("intstring");
            long parseLong("longstring");
            boolean parseBoolean("booleanstring");
            // 只有 Charater, 没有 parse 方法
            ```
        2. 如果字符串被 Integer 进行对象的封装, 可以使用另一个非静态的方法: intValue();
           将一个 Integer 对象转成基本数据类型的值
    
           ```
            Integer i = new Integer("123");
            System.out.println(i.intValue()); // 使用 intValue() 将 i 转换为 int 类型的值
            ```
    

    整数进制转换

    -  十进制转换为其他进制
    
    ```
    Integer.toBinaryString(); // 转换为二进制
    Integer.toOctalString(); // 转换为八进制
    Integer.toHexString(); // 转换为十六进制
    Integer.toString(int i, int radix); // 转换为任意进制
    ```
    
    - 其他进制转换为十进制
        `Integer.parseInt(String s, int radix);`
    

    a.equals(b); : Integer 比较数值是否相同
    int compareTo(Integer anotherInteger); : Integer 对象比较两个数值大小, 返回值为: -1, 0, 1

    自动装箱和自动拆箱

    - 自动装箱:把基本的数据类型转换成包装类
    - 自动拆箱:把包装类转换成基本的数据类型
    
    Integer i = new Integer(4);
    可以简化书写为: Integer i = 4; // 自动装箱
    i = i + 2; // 先将 i 进行自动拆箱, 变成了 int 类型, 和 2 进行加法运算
              // 再将和进行装箱赋给 i, 即 i = new Integer(i.intValue() + 2);
    

    备注:
    自动装箱(拆箱): Integer = null; `对于对象可以成立, 但是对于 int 类型不可以, 运算时, 会发生错误.
    因此, 使用 Integer 对象时, 需要进行健壮性判断.

    Integer a = new Integer(127);
    Integer b = new Integer(127);
    
    System.out.println(a==b); // false, 两个对象, 地址值不同
    System.out.println(a.equals(b)); // true, 比较的是数值
    
    Integer x = 127;
    Integer y = 127;
    
    System.out.println(x==y); // true
    
    Integer x = 128;
    Integer y = 128;
    System.out.println(x==y); // flase, JDK 1.5 以后, 自动装箱, 如果装箱的是一个字节(-128~!27)
                              // 那么该数据会被共享不会重新开辟空间
    
    
    // 示例: 下面代码运行的结果
        public static void main(String[] args){
            doSomethind(10);
        }
    
        public static void doSomething(double m){
            System.out.println("double...");
        }
    
        public static void doSomething(Integer a){
            System.out.println("integer...");
        }
    
        // 运行结果: double...
        // 首先在 JDK1.4 里面肯定调用这个方法, 如果调用下面的方法, 需要类型转换, 但是
        // JDK 1.4  不能实现自动拆装箱.由于 JDK 是向下兼容的, 所以, 在 JDK 1.4 调用
        // 这个方法, 在 JDK 1.5 里面还是会调用这个方法
    

    练习

    对一个字符串中的数值进行从小到大的排序
    "20 73 9 -7 88 36 29"

    思路:

    1. 排序
    2. 如何获取到这个字符串中需要排序的数值?
      发现这个字符串中其实都是空格来对数值进行分隔的,
      所以就想到用字符串对象的切割方法将大串变成多个小串
    3. 数值最终变成小字符串, 怎么变成一个 int 数呢?
      字符串转换为基本类型可以使用包装类
    import java.util.Arrays;  // 数组类中自带 sort() 方法
    
    public class WrapperTest{
        private static final String SPACE_SEPARATOR = " "; // 空格为常量,提高阅读性
    
        public static void main(String[] args){
            String numStr = "20 73 9 -7 88 36 29";
    
            System.out.println(numStr); // 未排序前
    
            numStr = sortStringNumber(numStr);
    
            System.out.println(numStr); // 排序后打印
    }
    
    public static String sortStringNumber(String numStr){
        // 1. 将字符串变成字符串数组
        // String[] str_arr = numStr.split(SPACE_SEPARATOR);
           String[] str_arr = stringToArray(numStr);  // 封装成方法,提高阅读性
    
        // 2. 将字符串数组变成 int 数组
             int[] num_arr = toIntArray(str_arr);
    
        // 3. 对 Int 数组排序
              mySortArray(num_arr);
    
        // 4. 将排序后的 int 数组变成字符串
             String temp = arrayToString(num_arr);
    
        return temp;
    }
    
    public static String[] stringToArray(String numStr){
        String[] str_arr = numStr.split(SPACE_SEPARATOR);
    
        return str_arr;
    }
    
    public static int[] toIntArray(String[] str_arr){
        int[] arr = new int[str_arr.length];
    
        for(int i = 0; i<arr.length; i++){
            arr[i] = Integer.parseInt(str_arr[i]);
    }
        return arr;
    }
    
    public static void mySortArray(int[] num_arr){
        Arrays.sort(num_arr);
    }
    
    public static String arrayToString(int[] num_arr){
        StringBuilder sb = new StringBuilder();
    
        for(int x = 0; x<num_arr.length(); x++){
            if(x != arr.length()-1)
                sb.append(num_arr[x] + SPACE_SEPARATOR);
            else
                sb.append(num_arr[x]);
    }
        return sb.toString();
    }
    
    }
    


    _参考资料_ - [JavaSE 基础视频(毕向东)](https://www.bilibili.com/video/av3113337/index_1.html#page=5) - [JDK 1.6 中文文档](http://tool.oschina.net/apidocs/apidoc?api=jdk-zh)
  • 相关阅读:
    【MySQL】MySQL的Sequence
    【Spring】Junit加载Spring容器作单元测试
    【Java】JDBC连接MySQL
    【Java】斐波那契数列(Fibonacci Sequence、兔子数列)的3种计算方法(递归实现、递归值缓存实现、循环实现、尾递归实现)
    【Java】Map杂谈,hashcode()、equals()、HashMap、TreeMap、LinkedHashMap、ConcurrentHashMap
    【Java】常见的Set类型,HashSet、TreeSet、LinkedHashSet
    【数据结构和算法】选择排序
    【数据结构与算法】插入排序
    【数据结构与算法】冒泡排序
    【Web】写个HTML页面去调试HTTP接口方便些
  • 原文地址:https://www.cnblogs.com/linkworld/p/7487949.html
Copyright © 2011-2022 走看看