02课堂问题整理

本文深入探讨了Java中的枚举类型用法,包括枚举类型的特性、变量声明与比较方式;解析了二进制数的不同表示形式及其计算原理;讨论了Java变量的同名屏蔽原则;总结了基本数据类型所占位数及范围;分析了double类型运算不精确的原因,并通过实例验证。

02课堂问题整理

一、仔细阅读示例: EnumTest.java,运行它,分析运行结果。你能得到什么结论?你掌握了枚举类型的基本用法了吗?

public class EnumTest {

public static void main(String[] args) {

Size s=Size.SMALL;

Size t=Size.LARGE;

//st引用同一个对象?

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};

}

运行结果:false  false  true  SMALL  MEDIUM  LARGE

结论:①枚举类型是引用类型。②枚举不属于原始数据类型,它的每个具体值都引用一个特定的对象。相同的值则引用同一个对象。③对于枚举类型的变量,“==”和equals()方法执行的结果是等价的。

 

二、原码就是符号位加上真值的绝对值,即用第一位表示符号,其余位表示值。反码的表示方法是:正数的反码是其本身,负数的反码是在其原码的基础上,符号位不变,其余各个位取反。补码的表示方法是:正数的补码就是其本身,负数的补码是在其原码的基础上,符号位不变,其余各位取反,最后+1

 

三、 Java变量遵循“同名变量的屏蔽原则”,请课后阅读相关资料弄清楚相关知识,然后自己编写一些测试代码。

public class CeShi {

int a=1;

public static void main(String agrs[])

{

int a=2;

int i=1;

if(i==1)

{

a=3;

System.out.println(a);

}

System.out.println(a);

}

}

测试结果:3 3

 

四、查查Java中每个数据类型所占的位数,和表示数值的范围,你能得出什么结论?

Byte 8位带符号整数 -128127之间的任意整数;Short 16位无符号整数 -32768~32767之间的任意整数 Int 32位带符号整数 -2^312^31-1之间的任意整数 Long 64位带符号整数 -2^632^63-1之间的任意整数 Float 32位单精度浮点数;Double 64位双精度浮点数。

 

五、请运行以下代码(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));

    }

}

运行结果:

0.05 + 0.01 = 0.060000000000000005

1.0 - 0.42 = 0.5800000000000001

4.015 * 100 = 401.49999999999994

123.3 / 100 = 1.2329999999999999

结论:使用double类型的数值进行计算, 其结果是不精确的。

 

六、为什么double类型的数值进行运算得不到“数学上精确”的结果?

double类型的数值占用64bit,即64个二进制数,除去最高位表示正负符号的位,在最低位上一定会与实际数据存在误差。

 

七、以下代码的输出结果是什么?为什么会有这样的输出结果?

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

    从左至右的运算顺序。

转载于:https://www.cnblogs.com/hjy415/p/5936316.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值