9.23日java动手动脑作业

1222carnivore / 2024-10-05 / 原文

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。