【原】Java学习笔记024 - 包装类

 1 package cn.temptation;
 2 
 3 public class Sample01 {
 4     public static void main(String[] args) {
 5         // 之前对于基本数据类型都是直接进行声明操作,缺少现成的成员方法可以使用
 6         // Java针对基本数据类型缺少成员方法的问题,提供了解决方案 ----- 包装类(WrapClass),对基本数据类型进行包装的类
 7         
 8         /*
 9          *         基本数据类型            对应的包装类
10          *         byte                Byte
11          *         short                Short
12          *         int                    Integer
13          *         long                Long
14          * 
15          *         float                Float
16          *         double                Double
17          * 
18          *         char                Character
19          * 
20          *         boolean                Boolean
21          */
22         
23         // 包装类Integer:Integer 类在对象中包装了一个基本类型 int 的值。Integer 类型的对象包含一个 int 类型的字段。 
24         
25         // Integer类的常用字段:
26         // 1、static int MAX_VALUE :值为 2^31-1 的常量,它表示 int 类型能够表示的最大值。 
27         // 2、static int MIN_VALUE :值为 -2^31 的常量,它表示 int 类型能够表示的最小值。 
28         System.out.println("Integer.MAX_VALUE:" + Integer.MAX_VALUE);        // 2147483647
29         System.out.println("Integer.MIN_VALUE:" + Integer.MIN_VALUE);        // -2147483648
30         
31         // Integer类的构造函数
32         // 1、Integer(int value) :构造一个新分配的 Integer 对象,它表示指定的 int 值。 
33         // 2、Integer(String s) :构造一个新分配的 Integer 对象,它表示 String 参数所指示的 int 值。 
34         int i = 2;
35         Integer integer1 = new Integer(i);
36         System.out.println("integer1:" + integer1);            // 2
37         System.out.println(integer1 instanceof Integer);    // true
38         // 语法错误:Syntax error, insert "Dimensions" to complete ArrayType
39 //        System.out.println(integer1 instanceof int);
40         System.out.println("-----------------------------------------");
41         
42         String str = "123";
43         Integer integer2 = new Integer(str);
44         System.out.println("integer2:" + integer2);
45         System.out.println(integer2 instanceof Integer);    // true
46         
47         String strEx = "java";
48         // 执行异常:java.lang.NumberFormatException: For input string: "java"
49         Integer integer3 = new Integer(strEx);
50         System.out.println("integer3:" + integer3);
51         System.out.println(integer3 instanceof Integer);
52     }
53 }
 1 package cn.temptation;
 2 
 3 public class Sample02 {
 4     public static void main(String[] args) {
 5         /*
 6          * Integer包装类的常用成员方法:
 7          * 1、static String toBinaryString(int i) :以二进制(基数 2)无符号整数形式返回一个整数参数的字符串表示形式。 
 8          * 2、static String toHexString(int i) :以十六进制(基数 16)无符号整数形式返回一个整数参数的字符串表示形式。 
 9          * 3、static String toOctalString(int i) :以八进制(基数 8)无符号整数形式返回一个整数参数的字符串表示形式。 
10          */
11         System.out.println(Integer.toBinaryString(3));        // 11
12         System.out.println(Integer.toHexString(10));        // a
13         System.out.println(Integer.toOctalString(9));        // 11
14     }
15 }
 1 package cn.temptation;
 2 
 3 public class Sample03 {
 4     public static void main(String[] args) {
 5         /*
 6          * int类型   和   string类型之间的转换
 7          * 
 8          * int类型----->string类型
 9          * string类型----->int类型
10          */
11         
12         // int类型----->string类型
13         int i = 2;
14         
15         // 方法1、使用String类的valueOf()方法
16         String str1 = String.valueOf(i);
17         System.out.println(str1);
18         
19         // 方法2、使用int类型和空字符串做加法
20         String str2 = i + "";
21         System.out.println(str2);
22         
23         // 方法3、使用Integer包装类作为中间桥梁,使用Integer的构造函数和toString方法
24         Integer integer1 = new Integer(i);
25         System.out.println(integer1.toString());
26         
27         // 方法4、使用Integer包装类的toString(int i)方法
28         System.out.println(Integer.toString(i));
29         
30         System.out.println("------------------------------------------------");
31         
32         // string类型----->int类型
33         String str = "123";
34         
35         // 方法1、使用Integer包装类作为中间桥梁,使用Integer的构造函数 和 intValue方法
36         Integer integer2= new Integer(str);
37         System.out.println(integer2.intValue());
38         
39         // 方法2、使用Integer包装类的parseInt方法
40         int j = Integer.parseInt(str);
41         System.out.println(j);
42         
43         // 执行异常:java.lang.NumberFormatException: For input string: "java"
44         System.out.println(Integer.parseInt("java"));
45     }
46 }
 1 package cn.temptation;
 2 
 3 public class Sample04 {
 4     public static void main(String[] args) {
 5         /*
 6          * Integer包装类的常用成员方法:
 7          * 1、static String toString(int i, int radix) :返回用第二个参数指定基数表示的第一个参数的字符串表示形式。
 8          * 2、static int parseInt(String s, int radix) :使用第二个参数指定的基数,将字符串参数解析为有符号的整数。  
 9          */
10         System.out.println(Integer.toString(2, 2));            // 10
11         System.out.println(Integer.toString(10, 16));        // a
12         System.out.println(Integer.toString(8, 8));            // 10
13         
14         System.out.println(Integer.toString(10, -2));        // 10
15         System.out.println(Integer.toString(17, 17));        // 10
16         System.out.println(Integer.toString(10, 17));        // a
17         System.out.println(Integer.toString(16, 17));        // g
18         
19         // 查看Integer包装类的toString方法
20         //if (radix < Character.MIN_RADIX || radix > Character.MAX_RADIX)
21         //    radix = 10;
22         // 查看Character包装类的字段
23         //public static final int MIN_RADIX = 2;
24         //public static final int MAX_RADIX = 36;
25         
26         System.out.println("------------------------------------");
27         
28         System.out.println(Integer.parseInt("2", 10));        // 2
29         System.out.println(Integer.parseInt("7", 8));        // 7
30         System.out.println(Integer.parseInt("F", 16));        // 15
31         System.out.println(Integer.parseInt("10", 16));        // 16
32         
33     }
34 }
 1 package cn.temptation;
 2 
 3 public class Sample05 {
 4     public static void main(String[] args) {
 5         /*
 6          * 自动装箱(boxing)   和  自动拆箱(unboxing)
 7          * 
 8          * 自动装箱:把基本数据类型装换为包装类类型(值类型----->引用数据类型)
 9          * 自动拆箱:把包装类类型装换为基本数据类型(引用数据类型----->值类型)
10          */
11         
12         // 自动装箱
13         Integer integer1 = new Integer(2);
14         System.out.println(integer1);
15         
16         // 简化写法:把int类型的数字字面量直接赋值给Integer包装类的变量
17         Integer integer2 = 3;
18         // 通过反编译class文件,看到
19 //        Integer integer2 = Integer.valueOf(3);
20         System.out.println(integer2);
21         
22         System.out.println("---------------------------------------");
23         
24         Integer integer3 = 4;
25         integer3 += 5;
26         // 通过反编译class文件,看到
27 //        Integer integer3 = Integer.valueOf(4);            // 自动装箱
28 //        integer3 = Integer.valueOf(integer3.intValue() + 5);        // 先做自动拆箱,拿着基本数据类型int和另一个基本数据类型int做加法,再做自动装箱
29         System.out.println(integer3);
30         
31         System.out.println("---------------------------------------");
32         
33         Integer integer4 = null;
34         System.out.println(integer4);
35         // 注意:37行语句上已经有警告:Null pointer access: The variable integer4 can only be null at this location
36         // 执行异常:java.lang.NullPointerException
37 //        System.out.println(integer4.toString());
38         
39         // 注意:41行语句上已经有警告:Null pointer access: This expression of type Integer is null but requires auto-unboxing
40         // 执行异常:java.lang.NullPointerException
41 //        integer4 += 6;
42 //        System.out.println(integer4);
43         
44         // 对于包装类类型的对象进行非空验证
45         // 注意:47行语句上已经有警告:Dead code,因为eclipse判断了integer4就是null
46         if (integer4 != null) {
47             integer4 += 6;
48             System.out.println(integer4);
49         }
50     }
51 }
 1 package cn.temptation;
 2 
 3 public class Sample06 {
 4     public static void main(String[] args) {
 5         // == 比较的是包装类对象的地址,自然不同;equals比较的是内容,自然相同
 6         Integer integer1 = new Integer(127);
 7         Integer integer2 = new Integer(127);
 8         System.out.println(integer1 == integer2);        // false
 9         System.out.println(integer1.equals(integer2));    // true
10         
11         System.out.println("----------------------------------------");
12         
13         // == 比较的是包装类对象的地址,自然不同;equals比较的是内容,自然相同
14         Integer integer3 = new Integer(128);
15         Integer integer4 = new Integer(128);
16         System.out.println(integer3 == integer4);        // false
17         System.out.println(integer3.equals(integer4));    // true
18         
19         System.out.println("----------------------------------------");
20         
21         Integer integer5 = 127;
22         Integer integer6 = 127;
23         System.out.println(integer5 == integer6);        // true
24         System.out.println(integer5.equals(integer6));    // true
25         
26         System.out.println("----------------------------------------");
27         
28         Integer integer7 = 128;
29         Integer integer8 = 128;
30         System.out.println(integer7 == integer8);        // false
31         System.out.println(integer7.equals(integer8));    // true
32         
33         // 查看反编译后的class文件
34 //        Integer integer5 = Integer.valueOf(127);
35 //        Integer integer6 = Integer.valueOf(127);
36         
37 //        Integer integer7 = Integer.valueOf(128);
38 //        Integer integer8 = Integer.valueOf(128);
39         
40         // Integer.valueOf(127),传入127,使用byte缓冲区,所以使用==,比较的地址是同一个地址
41         // Integer.valueOf(128),传入128,使用new创建新的空间,所以使用==,比较的地址是不同的地址
42         
43         // 推测可能是valueOf方法中的写法的差别
44         // 查看Integer类的valueOf方法源码
45 //        public static Integer valueOf(int i) {
46 //            if (i >= IntegerCache.low && i <= IntegerCache.high)
47 //                return IntegerCache.cache[i + (-IntegerCache.low)];
48 //            return new Integer(i);
49 //        }
50         
51         // 查看IntegerCache内部类的源码
52 //        static final int low = -128;
53 //        static final int high;
54 //        static final Integer cache[];
55 //        static {
56 //            int h = 127;
57 //            ...
58 //        }
59 //        high = h;
60         
61         // IntegerCache内部类的cache范围:-128~127,也称为byte缓冲区/byte缓存区
62     }
63 }
 1 package cn.temptation;
 2 
 3 public class Sample07 {
 4     public static void main(String[] args) {
 5         // 类 Character:在对象中包装一个基本类型 char 的值。Character 类型的对象包含类型为 char 的单个字段。
 6         
 7         /*
 8          * Character类的构造函数:
 9          * Character(char value) :构造一个新分配的 Character 对象,用以表示指定的 char 值。
10          * 
11          * Character类的常用成员方法:
12          * 1、static boolean isUpperCase(char ch) :确定指定字符是否为大写字母。
13          * 2、static boolean isLowerCase(char ch) :确定指定字符是否为小写字母。
14          * 3、static boolean isDigit(char ch) :确定指定字符是否为数字。
15          * 4、static char toUpperCase(char ch) :使用取自 UnicodeData 文件的大小写映射信息将字符参数转换为大写。
16          * 5、static char toLowerCase(char ch) :使用取自 UnicodeData 文件的大小写映射信息将字符参数转换为小写。     
17          */
18         Character character = new Character('a');
19         System.out.println(character);                // a
20         System.out.println("------------------------------------");
21         
22         System.out.println(Character.isUpperCase('A'));        // true
23         System.out.println(Character.isUpperCase('a'));        // false
24         System.out.println(Character.isLowerCase('A'));        // false
25         System.out.println(Character.isLowerCase('a'));        // true
26         
27         System.out.println(Character.isDigit('1'));        // true
28         System.out.println(Character.isDigit('a'));        // false
29         System.out.println("------------------------------------");
30         
31         System.out.println(Character.toUpperCase('a'));        // A
32         System.out.println(Character.toLowerCase('A'));        // a
33     }
34 }
 1 package cn.temptation;
 2 
 3 import java.util.Scanner;
 4 
 5 public class Sample08 {
 6     public static void main(String[] args) {
 7         // 需求:根据键盘录入的字符串(仅限大写字符、小写字符、数字字符),统计有多少个大写字符、多少个小写字符、多少个数字字符?(使用包装类)
 8         
 9         String str = "";
10         // 大写字符个数
11         int upperCount = 0;
12         // 小写字符个数
13         int lowerCount = 0;
14         // 数字字符个数
15         int digitCount = 0;
16         
17         System.out.println("输入一个字符串(仅限大写字符、小写字符、数字字符):");
18         Scanner input = new Scanner(System.in);
19         if (input.hasNextLine()) {
20             str = input.nextLine();
21         } else {
22             System.out.println("输入不正确!");
23         }
24         input.close();
25         
26         char[] arrChar = str.toCharArray();
27         
28         for (char item : arrChar) {
29             if (Character.isUpperCase(item)) {
30                 upperCount++;
31             } else if(Character.isLowerCase(item)) {
32                 lowerCount++;
33             } else if (Character.isDigit(item)) {
34                 digitCount++;
35             }
36         }
37         
38         System.out.println("字符串" + str + "中,大写字符有:" + upperCount + "个,小写字符有:" + lowerCount + "个,数字字符有:" + digitCount + "个");
39     }
40 }
 1 package cn.temptation;
 2 
 3 public class Sample09 {
 4     public static void main(String[] args) {
 5         int[] arr1 = null;
 6         System.out.println(arr1);        // null
 7         System.out.println("--------------------------------");
 8         
 9         float[] arr2 = null;
10         System.out.println(arr2);        // null
11         System.out.println("--------------------------------");
12         
13         boolean[] arr3 = null;
14         System.out.println(arr3);        // null
15         System.out.println("--------------------------------");
16         
17         char[] arr4 = null;
18         // 执行异常:java.lang.NullPointerException
19         System.out.println(arr4);
20         
21         // 查看反编译class文件,发现没有区别
22 //        int arr1[] = null;
23 //        System.out.println(arr1);
24 //        System.out.println("--------------------------------");
25 //        float arr2[] = null;
26 //        System.out.println(arr2);
27 //        System.out.println("--------------------------------");
28 //        boolean arr3[] = null;
29 //        System.out.println(arr3);
30 //        System.out.println("--------------------------------");
31 //        char arr4[] = null;
32 //        System.out.println(arr4);
33         
34         // 所以,推测打印方法println()是否有不同的处理
35         // 通过查看println()方法,可以看出,打印int[]、float[]、boolean[]数组,都是调用String的valueOf方法,打印出"null"
36         // 而打印char[]数组,调用write()方法,因为null没有相应的属性,所以使用时产生空指针异常
37         
38 //        public void println(Object x) {
39 //            String s = String.valueOf(x);
40 //            synchronized (this) {
41 //                print(s);
42 //                newLine();
43 //            }
44 //        }
45 //        
46 //        调用String类的valueOf方法
47 //        public static String valueOf(Object obj) {
48 //            return (obj == null) ? "null" : obj.toString();
49 //        }
50 //        
51 //        public void println(char x[]) {
52 //            synchronized (this) {
53 //                print(x);
54 //                newLine();
55 //            }
56 //        }
57         
58 //        public void print(char s[]) {
59 //            write(s);
60 //        }
61     }
62 }

 

posted @ 2017-03-17 21:05  {name:"代码屠夫"}  阅读(527)  评论(0编辑  收藏  举报