• 【JavaSE】基本类型包装类(以Integer代表)


    @

    构造方法

    • public Integer(int value)
    • public Integer(String s) 数字字符串转换成integer

    String和int的相互转换

    int→String

    • s = "" + number;
    • String.valueOf(number) String类的valueOf方法可以把任意类型的数据转换成字符串(字节数组除外)
    • Integer.toString(number)

    String→int

    • new Integer(s).intValue()

    • Integer.parseInt(String s)

            Integer ii = new Integer("123");
            int i = ii.intValue();
            System.out.println(i);
    
            String s = "555";
            int i = Integer.parseInt(s);
    
            String s2 = "hello";// s 必须是数字字符串才行!这样是错误的
            int i2 = Integer.parseInt(s2);//java.lang.NumberFormatException: For input string: "hello"
            System.out.println(i2);
    

    基本进制转换

    • Integer.toBinaryString(int i)
    • Integer.toOctalString(int i)
    • Integer.toHexString(int i)

    十进制→其他进制

    public static String toString(int i, int radix)

    public static String toString(100, 8);
    

    其他进制→十进制
    public static int parseInt(String s, int radix)

    public static int parseInt("100", 2);
    

    JDK5新特性:自动拆装箱

    装箱 : Integer.valueOf(int x)
    拆箱 : ii.intValue()

    /**
     * 自动装箱:把基本类型转换为包装类型
     * 自动拆箱:把包装类型转换为基本类型
     */
    public class IntegerDemo {
        public static void main(String[] args) {
            // 定义一个 int类型 的包装类类型变量 i
            Integer i = 100;
            i += 200;
            System.out.println("i : " + i);
    
            //通过反编译后的代码
            //    Integer i = Integer.valueOf(100);       //自定装箱
            //    i = Integer.valueOf(i.intValue() + 200); //自动拆箱,再自动装箱
            //    System.out.println(new StringBuilder("i : ").append(i).toString());
    
        }
    }
    
    

    integer面试题

    valueOf 装箱时的源码如下:

     public static Integer valueOf(int i) {
            if(i >= -128 && i <= IntegerCache.high)
                return IntegerCache.cache[i + 128];
            else
                return new Integer(i);
        }
    
    

    由此可知,valueOf会将常用的值(-128 to 127)cache起来。当 i 值在这个范围时,会比用构造方法Integer(int) 效率和空间上更好。所以在使用 == 号判断时会出现以下问题!

    public class IntegerDemo2 {
        public static void main(String[] args) {
            Integer i1 = new Integer(127);
            Integer i2 = new Integer(127);
            System.out.println(i1 == i2);      //false
            System.out.println(i1.equals(i2)); //true
            System.out.println("----------------------");
    
    
            Integer i3 = new Integer(128);
            Integer i4 = new Integer(128);
            System.out.println(i3 == i4);       //false
            System.out.println(i3.equals(i4)); //true
            System.out.println("-----------------------");
    
            Integer i5 = 127;
            Integer i6 = 127;
            System.out.println(i5 == i6);     //true
            System.out.println(i5.equals(i6));//true
            System.out.println("------------------------");
    
    
            Integer i7 = 128;
            Integer i8 = 128;
            System.out.println(i7 == i8);      //false
            System.out.println(i7.equals(i8));//true
            System.out.println("------------------------");
        }
    
    }
    
    

    new 关键字始终都会开辟新的内存地址指向,只有第三对 127 的值是 调用了自动装箱的valueOf() 方法从缓冲区中返回的对象引用,是同一个内存地址。


    Character包装类

    Character 类用于对单个字符进行操作。

    Character 类在对象中包装一个基本类型 char 的值

    // 原始字符 'a' 装箱到 Character 对象 ch 中
    Character ch = 'a';
     
    // 原始字符 'x' 用 test 方法装箱
    // 返回拆箱的值到 'c'
    char c = test('x');
    
    • public static boolean isUpperCase(char ch)

    • public static boolean isLowerCase(char ch)

    • public static boolean isDigit(char ch)

    • public static char toUpperCase(char ch)

    • public static char toLowerCase(char ch)

    • boolean isLetter(char ch) 判断指定字符是否为字母。

    • boolean isWhitespace(char ch) 判断指定字符是否为字母。

    案例:统计字符串中大小写及数字出现的次数

    /**
     * 统计字符串中的大写字母、小写字母、数字的个数
     */
    public class String2character {
        public static void main(String[] args) {
    
            int bigCount = 0;
            int smallCount = 0;
            int numberCount = 0;
    
    
            Scanner sc = new Scanner(System.in);
            System.out.println("请输入内容:");
            String line = sc.nextLine();
    
            char[] chars = line.toCharArray();
            for (int i = 0; i < chars.length ;i++){
                if (Character.isUpperCase(chars[i])){
                    bigCount ++;
                }else if (Character.isLowerCase(chars[i])){
                    smallCount ++;
                }else if (Character.isDigit(chars[i])){
                    numberCount ++;
                }
            }
    
            System.out.println("大写字母 " + bigCount);
            System.out.println("小写字母 " + smallCount);
            System.out.println("数字字母 " + numberCount);
            
        }
        
    }
    
    
    • Xxx.parseYyy的方法都是把包装类Xxx转为普通类型Yxx

    • Xxx.yyyValue()都是把xxx转为普通类型yyy

    • Xxx.valueOf(yyy)的方法都是yyy转化为Xxx包装类

  • 相关阅读:
    python中获取python版本号的方法
    Unity3D 的大场景内存优化
    Unity中的内存泄漏
    HDR和bloom效果的区别和关系
    用TexturePacker打图集用于UGUI中
    Lua的闭包详解(终于搞懂了)
    深入浅出!从语义角度分析隐藏在Unity协程背后的原理
    Unity3D导入3DMax模型缩放单位问题深入分析
    Unite 2017 | 从《闹闹天宫》看MOBA游戏里的网络同步技术
    Unity声音-音源组件
  • 原文地址:https://www.cnblogs.com/popo33/p/13221901.html
Copyright © 2020-2023  润新知