仔细阅读示例: 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};
运行结果为:
其中第一个输出是因为代码中的System.out.println(st);
是要判断s是否等于t的,而
Size s=Size.SMALL;
Size t=Size.LARGE;
s和t指向的是不同的值,所以输出为false;
第二个输出是因为代码中的System.out.println(s.getClass().isPrimitive());
s.getClass()返回的是class对象,而isPrimitive() 方法检查该类是否为原始数据类型,枚举是对象数据类型,所以输出为false;
第三个输出是因为代码中的System.out.println(su);
而因为Size.valueOf("SMALL") 将字符串 "SMALL" 转换为对应的枚举常量,由于 s 和 u 都指向 Size.SMALL,所以比较结果为 true;
第四五六个输出是for(Size value:Size.values())
{
System.out.println(value);
}
因为values方法是返回所有枚举类型的常量,所以就输出了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));
}
}
运行结果为:
你看到了什么样的输出,意外吗?
可以看到运算的结果和人工计算的结果并不相同,这是因为在计算机中,每个浮点数都有一个有限的精度。double 类型通常有 15 到 17 位数的有效数字,而 float 类型的有效数字约为 6 到 9 位数字。由于数值的有限精度,计算结果可能会受损;
按要求编写代码:
一家软件公司程序员二柱的小孩上了小学二年级,老师让家长每天出30道四则运算题目给小学生做。
我编写的Java代码如下:
import java.util.Random;
public class Math4 {
public static void main(String args[])
{
Random r2 = new Random();
for(int i=1;i<=30;i++)
{
int r1 = r2.nextInt(100);
int m=r2.nextInt(4);
int n = r2.nextInt(100);
int t = r2.nextInt(100);
switch(m)
{
case 0:
System.out.print(n+"+"+t+"="+(n+t)+"\t");
break;
case 1:
System.out.print(n+"-"+t+"="+(n-t)+"\t");
break;
case 2:
System.out.print(n+""+t+"="+(nt)+"\t");
break;
case 3:
if(n%t0) {
System.out.print(n + "/" + t + "=" + (n / t) + "\t");
}else {
double n1=n;
double t1=t;
System.out.print(n + "/" + t + "=" + (n1 / t1) + "\t");
}
break;
}
if(i%50)
{
System.out.println("\n");
}
}
}
}