了解Java八种基本类型、包装类,它们之间的区别。
重点掌握 1.数据类型之间的转换、强制类型转换//数值字符串转数字 String text = "3"; //通过Integer.parseInt(),将数字字符串,转换为数值 int num = Integer.parseInt(text); System.out.println(num); //控制台输出 3 //显式转换(强制类型转换) double b = 5.3; int a = (int)b; //整型没有小数,所以在强制转换时,要注意精度的问题 System.out.println(a); //控制台输出 52.四则运算的精度溢出问题
//两个double类型的数值进行四则运行 double a = 9.8; double b = 0.1; System.out.println(a+b); // 9.9 System.out.println(a-b); // 9.700000000000001 System.out.println(a*b); // 0.9800000000000001 System.out.println(a/b); // 9.9
这个问题涉及到计算机原理的知识,具体可以参考 java中float和double精度问题
具体的解决方案就是使用 Java在java.math包中提供的API类BigDecimal,而且必须使用BigDecimal构造函数BigDecimal(String),将基本数据类型float/double型数据转成String,然后通过String创建BigDecimal实例进行运算。
double a1 = 1.6; double b1 = 2.7; BigDecimal a = new BigDecimal(String.valueOf(a1)); BigDecimal b = new BigDecimal(String.valueOf(b1)); //乘法 BigDecimal c = a.multiply(b); // c的结果:4.32 //加法 BigDecimal d = a.add(b); // d的结果:4.33.基础类型的比较
“==”:可以比较基本数据类型 , 也可以比较引用数据类型。
“equals”:只能比较引用数据类型,默认比较的是地址值。string类中重写了eqals方法。
//特别注意数字类型和其包装类的比较,这里很容易出问题 int i = 10; Integer i1 = 10; Integer i2 = 10; Integer i3 = new Integer(10); Integer i4 = new Integer(10); Integer i5 = 200; Integer i6 = 200; System.out.println(i == i1);// true;i1自动拆箱变成基本类型,两基本类型比较值 System.out.println(i == i3);// true; i3自动拆箱变成基本类型,两基本类型比较值 System.out.println(i1 == i2);// true; i1和i3都指向常量池中同一个地址 System.out.println(i1 == i3);// false; 两个不同的对象 System.out.println(i3 == i4);// false; 两个不同的对象 System.out.println(i5 == i6);// false; 自动装箱时,如果值不在-128到127,就会创建一个新的对象 System.out.println(i1.equals(i));// true;基本型封装类型调用equals(),但是参数是基本类型,这时候,先会进行自动装箱,基本型转换为其封装类型,再进行比较 System.out.println(i3.equals(i4));// true;两个基本型的封装型进行equals()比较,首先equals()会比较类型,如果类型相同,则继续比较值,如果值也相同,返回true



