每日日报之“动手动脑”作业
1.仔细阅读示例: EnumTest.java,运行它,分析运行结果
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};
运行结果:
结论:枚举类型是引用类型。枚举不属于原始数据类型,其每个具体值都因用一个特定的对象。相同的值则引用同一个对象。对于枚举类型的变量,为其赋值或直接取用枚举类型二者含义相同。
2.阅读相应教材,或者使用互联网搜索引擎,弄清楚反码、补码跟原码这几个概念,然后编写示例程序,对正数、负数进行各种位操作,观察输出结果,与手工计算的结果进行比对,看看Java中的数是采用上述哪种码表示的
原码:就是符号位加上真值的绝对值, 即用第一位表示符号, 其余位表示值。
反码:正数的反码是其本身;负数的反码是在其原码的基础上, 符号位不变,其余各个位取反。
补码:正数的补码就是其本身;负数的补码是在其原码的基础上, 符号位不变, 其余各位取反, 最后+1 (即在反码的基础上+1)。
结论:Java中的数是采用原码表示的。
3.Java变量遵循“同名变量的屏蔽原则”,请课后阅读相关资料弄清楚相关知识,然后自己编写一些测试代码,就象本示例一样,有意识地在不同地方定义一些同名变量,看看输出的到底是哪个值
示例:
public class Test{ private static int value = 1; public static void main(String[] args) { int value = 2; System.out.println(value); } }
结果:输出2。由此可看出同名变量屏蔽原则。
4.看着这个图,再查查Java中每个数据类型所占的位数,和表示数值的范围,你能得出什么结论
结论:JAVA中的类型转换由低到高无精度损失,由高到低则相反。
5.动手实验
运行以下代码:
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)); } }
运行结果如ppt:
结论:使用double类型的数值进行计算,其结果是不精确的。
原因:这个涉及到二进制与十进制的转换问题。N进制可以理解为:数值×基数的幂。double类型的数值占用64bit,即64个二进制数,除去最高位表示正负符号的位,在最低位上一定会与实际数据存在误差(除非实际数据恰好是2的n次方)。
6.以下代码的输出结果是什么
public class Test{ public static void main(String[] args) { int X=100; int Y=200; System.out.println("X+Y="+X+Y); System.out.println(X+Y+"=X+Y"); } }
输出结果:
原因:第一个“+”在”X+Y=“之后,是连接词,依此输出X、Y;第二个”+“在”=X+Y“之前,是运算符,所以输出(X+Y)的值。
顺便,今天日程:“动手动脑”作业彻底完成,作业三即将完成。
问题无。
下午及明天计划:所有作业的彻底完成。