java 提供了8种基本数据类型对应的包装类,使得基本数据类型的变量具有类的特征。
public void test1(){ public static void main(String[] args){ int num1 = 10;// System.out.println(num1.toString()); 报错 Integer in1 = new Integer(num1); //通过构造器装箱 System.out.println(in1.toString()); Integer in2 = new Integer("123"); //通过字符串参数装箱 System.out.println(in2.toString()); //报异常// Integer in3 = new Integer("123abc");// System.out.println(in3.toString()); Float f1 = new Float(12.3f); //通过构造器装箱 Float f2 = new Float("12.3"); //通过字符串参数装箱 System.out.println(f1); System.out.println(f2); Boolean b1 = new Boolean(true); Boolean b2 = new Boolean("TrUe"); System.out.println(b2); //true/* b2 返回 true 原因: public Boolean(String s) { this(parseBoolean(s)); } public static boolean parseBoolean(String s) { return ((s != null) && s.equalsIgnoreCase("true")); } equalsIgnoreCase() 方法用于将字符串与指定的对象比较,不考虑大小写。 如果给定对象与字符串相等,则返回 true,否则返回 false。*/ Boolean b3 = new Boolean("true123"); System.out.println(b3); //false Order order = new Order(); System.out.println(order.isMale); //false(基本数据类型默认值) System.out.println(order.isFemale); /ull(引用数据类型默认值) }}class Order{ boolean isMale; Boolean isFemale;}
public void test2(){ public static void main(String[] args){ Integer in1 = new Integer(12); int i1 = in1.intValue(); //调用类方法xxxValue() System.out.println(i1 + 1); // 13 Float f1 = new Float(12.3); float f2 = f1.floatValue(); //调用类方法xxxValue() System.out.println(f2 + 1); // 13.3 }}
// JDK 5.0 新特性:自动装箱 与自动拆箱public void test3(){ int num1 = 10; Integer in1 = num1; //自动装箱 boolean b1 = true; Boolean b2 = b1; //自动装箱 System.out.println(in1.toString()); int num3 = in1; //自动拆箱 }
// String类型:调用String重载的valueOf(Xxx xxx)public void test4(){ public static void main(String[] args){ int num1 = 10; //方式1:连接运算 String str1 = num1 + ""; //方式2:调用String的valueOf(Xxx xxx) float f1 = 12.3f; String str2 = String.valueOf(f1); Double d1 = new Double(12.4); String str3 = String.valueOf(d1); System.out.println(str2); //"12.3" System.out.println(str3); //"12.4" } }
// 调用包装类的parseXxx(String s)public void test5(){ public static void main(String[] args){ String str1 = "123"; //错误的情况:// int num1 = (int)str1;// Integer in1 = (Integer)str1; int num2 = Integer.parseInt(str1); //当字符串中不是纯数字时,可能会报NumberFormatException System.out.println(num2 + 1); String str2 = "true1"; boolean b1 = Boolean.parseBoolean(str2); System.out.println(b1); //false }}
public void test6(){ public static void main(String[] args){ Object o1 = true ? new Integer(1) : new Double(2.0); System.out.println(o1); // 输出 1.0,三元运算符要求两边表达式数据类型一致,左边 Integer 类型自动类型转换为 Double }}
public void method1() { public static void main(String[] args){ Integer i = new Integer(1); Integer j = new Integer(1); System.out.println(i == j); //false Integer m = 1; Integer n = 1; System.out.println(m == n); //true Integer x = 128; //相当于new了一个Integer对象 Integer y = 128; //相当于new了一个Integer对象 System.out.println(x == y); //false }}/* Integer内部定义了IntegerCache结构,IntegerCache中定义了Integer[],保存了从-128~127范围的整数。如果我们使用自动装箱的方式,给Integer赋值的范围在-128~127范围内时,可以直接使用数组中的元素,不用再去new了。 目的:提高效率 详细可以看 Integer 源码*/
原文出处:Java面向对象(六)