9.23日java动手动脑作业
1.仔细阅读示例: 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};
输出结果:
原因:枚举不属于原始数据类型,它的每个具体值都引用一个特定的对象。相同的值则引用同一个对象。可以使用“==”直接比对枚举变量的值,如果值相同,则输出true,反之输出false。
2.请运行以下代码(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.1/100="+(123.1/100));
}
}
输出结果:
原因:double类型无法精确,与底层补码有关。double类型的数值占用64bit,即64个二进制数。我们给出的数值在大多数情况下需要比64bit更多的位数才能准确表示出来(甚至是需要无穷多位),而double类型的数值只有64bit,后面舍去的位数一定会带来误差,所以无法得到真正正确的结果。
3.以下代码的输出结果是什么?
int X=100;
int Y=200;
System.out.println("X+Y="+X+Y);
System.out.println(X+Y+"=X+Y");
为什么会有这样的输出结果?
X+Y=100200
300=X+Y
理由:"X+Y="+X+Y中输出的是字符串,“+”直接连接两个字符串,所以分别输出100和200,即100200
X+Y+"=X+Y"中,“+”是进行求和运算,100+200即300。