【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包装类

posted @ 2020-07-01 22:14  bluepopo  阅读(133)  评论(0编辑  收藏  举报