38、java常用类-Integer

来源:互联网 发布:淘宝刷销量软件免费版 编辑:程序博客网 时间:2024/05/29 19:20
一、基本类型包装类概述1、将基本数据类型封装成对象的好处在于可以在对象中定义更多      的功能方法操作该数据。2、常用的操作之一:用于基本数据类型与字符串之间的转换。3、基本类型和包装类的对应 * byte Byte * shortShort * intInteger * longLong * floatFloat * doubleDouble * charCharacter * booleanBoolean4、int的范围最小值:Integer.MIN_VALUE最大值:Integer.MAX_VALUE二、Integer类概述及其构造方法1、Integer类概述1)Integer 类在对象中包装了一个基本类型 int 的值2)该类提供了多个方法,能在 int 类型和 String 类型之间互相转换,      还提供了处理 int 类型时非常有用的其他一些常量和方法2、构造方法1)public Integer(int value)2)public Integer(String s)注意:这个字符串必须是由数字字符组成public class IntegerDemo {public static void main(String[] args) {// 方式1int i = 100;Integer ii = new Integer(i);System.out.println("ii:" + ii);// 方式2String s = "100";// NumberFormatException// String s = "abc";Integer iii = new Integer(s);System.out.println("iii:" + iii);}}三、Integer类成员方法public int intValue()public static int parseInt(String s)public static String toString(int i)public static Integer valueOf(int i)public static Integer valueOf(String s)public class IntegerDemo {public static void main(String[] args) {// int -- Stringint number = 100;// 方式1String s1 = "" + number;System.out.println("s1:" + s1);// 方式2String s2 = String.valueOf(number);System.out.println("s2:" + s2);// 方式3// int -- Integer -- StringInteger i = new Integer(number);String s3 = i.toString();System.out.println("s3:" + s3);// 方式4// public static String toString(int i)String s4 = Integer.toString(number);System.out.println("s4:" + s4);System.out.println("-----------------");// String -- intString s = "100";// 方式1// String -- Integer -- intInteger ii = new Integer(s);// public int intValue()int x = ii.intValue();System.out.println("x:" + x);//方式2//public static int parseInt(String s)int y = Integer.parseInt(s);System.out.println("y:"+y);}}int类型和String类型的相互转换(推荐用下面的方法)int -- StringString.valueOf(number);String -- intInteger.parseInt(s);四、常用的基本进制转换 public static String toBinaryString(int i) public static String toOctalString(int i)public static String toHexString(int i)   十进制到其他进制 public static String toString(int i,int radix) 由这个我们也看到了进制的范围:2-36  为什么呢?0,...9,a...z(共36个)  其他进制到十进制 public static int parseInt(String s,int radix)public class IntegerDemo {public static void main(String[] args) {// 十进制到二进制,八进制,十六进制System.out.println(Integer.toBinaryString(100));System.out.println(Integer.toOctalString(100));System.out.println(Integer.toHexString(100));System.out.println("-------------------------");// 十进制到其他进制System.out.println(Integer.toString(100, 10));System.out.println(Integer.toString(100, 2));System.out.println(Integer.toString(100, 8));System.out.println(Integer.toString(100, 16));System.out.println(Integer.toString(100, 5));System.out.println(Integer.toString(100, 7));System.out.println(Integer.toString(100, -7));System.out.println(Integer.toString(100, 70));System.out.println(Integer.toString(100, 1));System.out.println(Integer.toString(100, 17));System.out.println(Integer.toString(100, 32));System.out.println(Integer.toString(100, 37));System.out.println(Integer.toString(100, 36));System.out.println("-------------------------");//其他进制到十进制System.out.println(Integer.parseInt("100", 10));System.out.println(Integer.parseInt("100", 2));System.out.println(Integer.parseInt("100", 8));System.out.println(Integer.parseInt("100", 16));System.out.println(Integer.parseInt("100", 23));//NumberFormatException//System.out.println(Integer.parseInt("123", 2));}}五、JDK5的新特性自动装箱:把基本类型转换为包装类类型自动拆箱:把包装类类型转换为基本类型注意:在使用时,Integer  x = null;代码就会出现NullPointerException。    建议先判断是否为null,然后再使用。public class IntegerDemo {public static void main(String[] args) {// 定义了一个int类型的包装类类型变量i// Integer i = new Integer(100);Integer ii = 100;ii += 200;System.out.println("ii:" + ii);// 通过反编译后的代码// Integer ii = Integer.valueOf(100); //自动装箱// ii = Integer.valueOf(ii.intValue() + 200); //自动拆箱,再自动装箱// System.out.println((new StringBuilder("ii:")).append(ii).toString());Integer iii = null;// NullPointerExceptionif (iii != null) {iii += 1000;System.out.println(iii);}}}六、Integer的面试题public class IntegerDemo {public static void main(String[] args) {Integer i1 = new Integer(127);Integer i2 = new Integer(127);System.out.println(i1 == i2);System.out.println(i1.equals(i2));System.out.println("-----------");Integer i3 = new Integer(128);Integer i4 = new Integer(128);System.out.println(i3 == i4);System.out.println(i3.equals(i4));System.out.println("-----------");Integer i5 = 128;Integer i6 = 128;System.out.println(i5 == i6);System.out.println(i5.equals(i6));System.out.println("-----------");Integer i7 = 127;Integer i8 = 127;System.out.println(i7 == i8);System.out.println(i7.equals(i8));// 通过查看源码,我们就知道了,针对-128到127之间的数据,做了一个数据缓冲池,如果数据是该范围内的,每次并不创建新的空间// Integer ii = Integer.valueOf(127);}}结果:false truefalse truefalsetruetrueture注意:Integer的数据直接赋值,如果在-128到127之间,会直接从缓冲池里获取数据Integer部分源码: public static Integer valueOf(int i) {        assert IntegerCache.high >= 127;        if (i >= IntegerCache.low && i <= IntegerCache.high)            return IntegerCache.cache[i + (-IntegerCache.low)];        return new Integer(i);    }