动手动脑
根据运行结果,我们可以得出以下结论:
System.out.println(s == t); // false
结论:在枚举类型中,即使它们属于同一个枚举类,不同的枚举常量也是不同的对象。因此,比较操作符 == 在这里返回 false,说明 s 和 t 引用的是不同的枚举常量。
System.out.println(s.getClass().isPrimitive()); // false
结论:枚举类型不是原始数据类型,而是引用类型。isPrimitive 方法返回 false,这表明 s 是一个枚举类型的引用,而不是基本数据类型。
System.out.println(s == u); // true
结论:使用 valueOf 方法可以根据枚举常量的名称获取到枚举常量的实例。由于枚举常量是单例的,所以通过 valueOf 获取的 SMALL 实例与直接声明的 SMALL 实例是同一个对象,因此 == 比较返回 true。
for(Size value : Size.values()){ System.out.println(value); }
输出:SMALL, MEDIUM, LARGE
结论:values() 方法返回一个包含枚举类型中所有枚举常量的数组,可以使用循环来遍历并打印这些常量。
综上所述,我们可以得出以下结论:
枚举类型是一种引用类型,不是原始数据类型。
枚举常量是单例的,即每个枚举常量在枚举类型中只存在一个实例。
可以使用 == 运算符来比较枚举常量,因为它们是单例的。
可以使用 valueOf 方法通过枚举常量的名称来获取枚举常量。
可以使用 values 方法来获取枚举类型中所有枚举常量的数组。
这种不精确的结果是由于计算机在内部使用二进制浮点数表示十进制数,而某些十进制小数不能精确地转换为二进制表示。
这个输出结果是由于字符串连接和算术加法在Java中的优先级规则所导致的。在Java中,+运算符既可以用于算术加法,也可以用于字符串连接。当+运算符用于字符串和非字符串类型时,它会将非字符串类型转换为字符串,并执行字符串连接操作。
System.out.println("X+Y="+X+Y);
首先计算字符串字面量 "X+Y=",然后遇到+运算符。X是一个整数,Java会将其转换为字符串 "100" 并与前面的字符串 "X+Y=" 连接,得到 "X+Y=100"。Y 也是一个整数,同样被转换为字符串 "200" 并与前一个字符串 "X+Y=100" 连接,最终得到 "X+Y=100200"。
System.out.println(X+Y+"=X+Y");
首先计算 X+Y,这是一个算术加法操作,结果为 300。然后遇到+运算符,由于左边的结果是整数 300,而右边是字符串 "=X+Y",Java会将整数 300 转换为字符串 "300" 并与 "=X+Y" 连接,得到 "300=X+Y"。
import java.util.Random;
public class Test1 {
public static void main(String[] args) {
for (int i = 0; i < 30; i++) {
Random r = new Random();
int data1 = r.nextInt(100)+1;
int data2 = r.nextInt(100)+1;
System.out.println(i+1 + " : " + data1 + " + " + data2 + " =");
}
}
}