对EnumTest.java的测试
点击查看代码
public class EnumTest {
public static void main(String[] args) {
Size s=Size.SMALL;
Size t=Size.LARGE;
//s和t引用一个对象?
System.out.println(s==t); //
//是原始数据类型吗
System.out.println(s.getClass().isPrimitive());
//从字符串中转换
Size u=Size.valueOf("SMALL");
System.out.println(s==u); //true
//列出他的所有值
for(Size value:Size.values()){
System.out.println(value);
}
}
}
enum Size{SMALL,MEDIUM,LARGE};
Size s = Size.SMALL; 和 Size t = Size.LARGE; 分别创建了两个枚举实例的引用s和t,它们分别指向Size枚举中的SMALL和LARGE。
System.out.println(s == t); 比较s和t是否引用同一个对象。由于s指向的是SMALL,而t指向的是LARGE,它们是不同的枚举常量,因此输出结果为false。
System.out.println(s.getClass().isPrimitive()); 这行代码检查s的类是否为原始数据类型。因为枚举不是原始数据类型,所以输出结果为false。
Size u = Size.valueOf("SMALL"); 这行代码通过静态方法valueOf根据字符串"SMALL"获取对应的枚举常量,这会返回一个与s相同类型的枚举实例,实际上就是s引用的对象。
System.out.println(s == u); 输出的结果是true,这是因为s和u都引用了相同的枚举常量对象SMALL。
最后,通过for循环遍历Size.values()数组,打印出枚举Size的所有可能值。这里将依次输出:
SMALL
MEDIUM
LARGE
测试TestDouble.java
点击查看代码
public class TestDouble {
public static void main(String args[]) {
System.out.println("0.05 + 0.01 = " + (0.05 + 0.01));
System.out.println("1.0 - 0.42 = " + (1.0 - 0.42));
System.out.println("4.015 * 100 = " + (4.015 * 100));
System.out.println("123.3 / 100 = " + (123.3 / 100));
}
}
IEEE 754 标准
IEEE 754标准规定了浮点数的表示方法。对于double类型,它使用64位来表示一个浮点数,包括1位符号位、11位指数位和52位尾数位。
计算机内部表示
在计算机内部,0.05和0.01这样的小数会被近似表示为二进制形式。具体来说:
0.05 的二进制表示是 0.0000101000111101011100001010001111010111000010100011110...
0.01 的二进制表示是 0.00011001100110011001100110011001100110011001100110011...
由于这些小数在二进制中是无限循环的,所以在计算机内部只能用有限位数来近似表示。这就会导致最终计算结果出现微小的误差。
代码运行分析
点击查看代码
int X=100;
int Y=200;
System.out.println("X+Y="+X+Y);
System.out.println(X+Y+"=X+Y");
问题在于+与""的链接上,""后接+将x的值输出,也将后边的+变为了连接作用
实现随机出题
点击查看代码
public class Math4 {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
Random ran=new Random();
int flag=0;
while(flag<30) {
int x=ran.nextInt(100);
int y=ran.nextInt(100);
int s=ran.nextInt(4);
switch(s) {
case 0:System.out.printf("%2d+%2d=",x,y);break;
case 1:System.out.printf("%2d-%2d=",x,y);break;
case 2:System.out.printf("%2d*%2d=",x,y);break;
case 3:System.out.printf("%2d/%2d=",x,y);break;
default:break;
}
System.out.println();
flag++;
}
}
}