仔细阅读示例: 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);
}
}
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};
enum Size{SMALL,MEDIUM,LARGE};
其输出结果为:
false
false
true
SMALL
MEDIUM
LARGE
false
true
SMALL
MEDIUM
LARGE
结论:
枚举类型是引用类型!
枚举不属于原始数据类型,它的每个具体值都引用一个特定的对象。相同的值则引用同一个对象。
可以使用“==”和equals()方法直接比对枚举变量的值,换句话说,对于枚举类型的变量,“==”和equals()方法执行的结果是等价的。
枚举不属于原始数据类型,它的每个具体值都引用一个特定的对象。相同的值则引用同一个对象。
可以使用“==”和equals()方法直接比对枚举变量的值,换句话说,对于枚举类型的变量,“==”和equals()方法执行的结果是等价的。
请运行以下代码(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));
}
}
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类型的数值进行计算,计算结果是不精确的。
原因:
二进制和十进制的转换出现问题,简单来说就是我们给出的数值,在大多数的情况下需要比64bit更多的位数才能准确表示出来,而double类型的数值只有64bit,后面舍去的位数一定会带来的误差,无法得到数学上精确的结果。
以下代码的输出结果是什么?
int X=100;
int Y=200;
System.out.println("X+Y="+X+Y);
System.out.println(X+Y+"=X+Y");
为什么会有这样的输出结果?
int X=100;
int Y=200;
System.out.println("X+Y="+X+Y);
System.out.println(X+Y+"=X+Y");
为什么会有这样的输出结果?
原因:
1.System.out.println(""X+Y="+X+Y")第一个遇到是字符串,所以后面输出的X和Y都会按照字符串来输出,所以并不会计算X+Y的值,所以输出结果为:X+Y=100200 。
2.而System.out.println(X+Y+"=X+Y")第一个遇到的是int型的X,第二个遇到的是int型的Y,所以输出二者相加的int型结果,再连接输出后面的字符串"=X+Y",所以输出结果300=X+Y 。
原码、补码和反码
原码就是将十进制的数转化为二进制的数,我们平常的十进制数是满十进一,所以二进制数是满二进一,比如+10的原码就是00001010。在这里,数字的第高位代表正负,0代表正数,1则代表负数,因此,-10便是10001010。
正数的反码和补码就是原码本身,负数的反码是符号位不变,将其他位数字1变成0,0变成1。负数的补码是在其反码的基础上加1。
+10的原码是00001010,那他的反码,补码都和原码相同,也是00001010,原因是正数的原、反、补码相同。
-10的原码是10001010,那他的反码是11110101,也就是符号位不变,其他位0变1,1变0。他的补码是在反码的基础上,最低位加1,也就是11110110。