动手动脑
一.仔细阅读示例: EnumTest.java,运行它,分析运行结果?
第一个判断s和t是否引用了同一对象,由于s和t不是同一对象,所以是flase
第二个判断s是否为基本数据类型,由于s是枚举类型,所以是flase
第三个将字符串“SMALL”转化成为枚举类型,与s一样,所以是true
最后遍历输出
二.你能得到什么结论?你掌握了枚举类型的基本用法了吗?
相同的值引用同一对象
枚举类型不是基本数据类型
可以用==和equals()直接对比值
字符串可以转化成枚举类型
三.阅读相应教材,或者使用互联网搜索引擎,弄清楚反码、补码跟原码这几个概念,然后编写示例程序,对正数、负数进行各种位操作,观察输出结果,与手工计算的结果进行比对,看看Java中的数是采用上述哪种码表示的
示例程序:
结果:
Java中补码计算
四. Java变量遵循“同名变量的屏蔽原则”,请课后阅读相关资料弄清楚相关知识,然后自己编写一些测试代码,就象本示例一样,有意识地在不同地方定义一些同名变量,看看输出的到底是哪个值。
在Java中,同名变量屏蔽原则是指在一个作用域内,如果有一个变量与外部作用域中的变量同名,那么它会屏蔽外部作用域中同名的变量。这个原则也被称为变量隐藏
如果在一个方法中定义了一个局部变量,它与类的成员变量同名,那么在这个方法的作用域内,成员变量将被屏蔽。
如果内部类和外部类有同名的成员变量,那么在内部类中,外部类的同名成员变量会被屏蔽。
在一个代码块(如for循环或if语句)中定义的变量会屏蔽外部作用域中同名的变量。
蔽是指变量名相同,但重载通常指的是方法名相同而参数列表不同。
五,看着这个图,再查查Java中每个数据类型所占的位数,和表示数值的范围,你能得出什么结论?
数据类型 位数 表示数值的范围
Int 32位 -2的31次方 ~ 2的31次方
Short 16位 -32768 ~ 32678
long 64位 -2的63次方~2的63次方
float 32位 10-38~1038和-10-38~-1038
double 64位 10-308~10308和-10-308~-10308
char 16位 -2的7次方~2的7次方
boolean 1位 true/false
byte 8位 -128 ~ 127
结论:实线代表无精度损失,虚线代表有精度损失,低精度向高精度转化不丢失精度,反之,从高精度传向低精度则会损失。
六.为什么double类型的数值进行运算得不到“数学上精确”的结果?
double 类型在内存中占用64位,其中1位用于符号,11位用于指数,剩下的52位用于尾数(或称为有效数字)。这意味着 double 类型只能精确表示2^53(大约9.0072e15)个不同的数值。
由于这种表示限制,许多实数(例如1/3)不能精确表示为 double 类型,只能近似表示。
当执行加法、减法、乘法或除法运算时,可能会产生超出尾数所能表示的精度的数值。这时,结果会被舍入到最接近的可表示值,导致精度损失。
根据IEEE 754标准,double 类型的运算结果通常遵循“向偶数舍入”的规则(也称为银行家舍入法)。这意味着在某些情况下,结果会被舍入到最近的偶数,以减少累积误差。
浮点数的运算顺序可能会影响最终结果。由于舍入误差的存在,不同的运算顺序可能会导致不同的结果。
七.以下代码的输出结果是什么?
public class Text{
public stastic 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=100200
300=X+Y
原因:因为输出的是字符串,前一个表示分别输出两个字符串,而后一个表示用字符串输出两个整形的和。