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 Byte11 * short Short12 * int Integer13 * long Long14 * 15 * float Float16 * double Double17 * 18 * char Character19 * 20 * boolean Boolean21 */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); // 214748364729 System.out.println("Integer.MIN_VALUE:" + Integer.MIN_VALUE); // -214748364830 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); // 237 System.out.println(integer1 instanceof Integer); // true38 // 语法错误:Syntax error, insert "Dimensions" to complete ArrayType39 // 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); // true46 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)); // 1112 System.out.println(Integer.toHexString(10)); // a13 System.out.println(Integer.toOctalString(9)); // 1114 }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)); // 1011 System.out.println(Integer.toString(10, 16)); // a12 System.out.println(Integer.toString(8, 8)); // 1013 14 System.out.println(Integer.toString(10, -2)); // 1015 System.out.println(Integer.toString(17, 17)); // 1016 System.out.println(Integer.toString(10, 17)); // a17 System.out.println(Integer.toString(16, 17)); // g18 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)); // 229 System.out.println(Integer.parseInt("7", 8)); // 730 System.out.println(Integer.parseInt("F", 16)); // 1531 System.out.println(Integer.parseInt("10", 16)); // 1632 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 location36 // 执行异常:java.lang.NullPointerException37 // System.out.println(integer4.toString());38 39 // 注意:41行语句上已经有警告:Null pointer access: This expression of type Integer is null but requires auto-unboxing40 // 执行异常:java.lang.NullPointerException41 // integer4 += 6;42 // System.out.println(integer4);43 44 // 对于包装类类型的对象进行非空验证45 // 注意:47行语句上已经有警告:Dead code,因为eclipse判断了integer4就是null46 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)); // true10 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); // false17 System.out.println(integer3.equals(integer4)); // true18 19 System.out.println("----------------------------------------");20 21 Integer integer5 = 127;22 Integer integer6 = 127;23 System.out.println(integer5 == integer6); // true24 System.out.println(integer5.equals(integer6)); // true25 26 System.out.println("----------------------------------------");27 28 Integer integer7 = 128;29 Integer integer8 = 128;30 System.out.println(integer7 == integer8); // false31 System.out.println(integer7.equals(integer8)); // true32 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); // a20 System.out.println("------------------------------------");21 22 System.out.println(Character.isUpperCase('A')); // true23 System.out.println(Character.isUpperCase('a')); // false24 System.out.println(Character.isLowerCase('A')); // false25 System.out.println(Character.isLowerCase('a')); // true26 27 System.out.println(Character.isDigit('1')); // true28 System.out.println(Character.isDigit('a')); // false29 System.out.println("------------------------------------");30 31 System.out.println(Character.toUpperCase('a')); // A32 System.out.println(Character.toLowerCase('A')); // a33 }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); // null11 System.out.println("--------------------------------");12 13 boolean[] arr3 = null;14 System.out.println(arr3); // null15 System.out.println("--------------------------------");16 17 char[] arr4 = null;18 // 执行异常:java.lang.NullPointerException19 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 }