首页 > 编程语言 > 详细

Java枚举类型的使用,数值的二进制表示

时间:2019-09-18 23:55:21      阅读:224      评论:0      收藏:0      [点我收藏+]

一.Java枚举类型的使用

  首先请看这段代码:

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

  运行结果如下

技术分享图片

  为什么是这个结果呢? 

     1.s和t不会引用同一个对象

     2.s也不是原始数据类型原始类型,java中的原始类型包括 boolean,char ,byte,short ,int,long ,float ,double

     3.将枚举成员经字符串转换后赋值给一新的变量,会与已赋值这个枚举成员的变量共用一处内存,比如代码中的s与u。

     4.将枚举成员输出

  • 结论

     1.枚举类型是引用类型
     2.枚举不属于原始数据类型,它的每个具体值都引用一个特定的对象。相同的值则引用同一个对象。
     3.可以使用“==”和equals()方法直接比对枚举变量的值,换句话说,对于枚举类型的变量,“==”和equals()方法执行的结果是等价的。

  • 枚举类型的基本用法

      常量,switch,向枚举中添加新方法,覆盖枚举的方法,实现接口,使用接口组织枚举,关于枚举集合的使用

二.数值的二进制表示

  • 概念

      原码:二进制的定点表示法,即最高位为符号位,“0”表示正,“1”表示负,其余位表示数值的大小。

      反码:正数的反码与其原码相同;负数的反码是对其原码逐位取反,但符号位除外。

      补码:正数的补码与其原码相同;负数的补码是在其反码末位加1。

  • Java用的是补码。

三.动手实验

  •    请运行以下代码
package 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));
    }
}

       你看到了什么样的输出,意外吗?

     技术分享图片

  • 结论:使用double类型的数值进行计算, 其结果是不精确的。
  • why:因为java中十进制与二进制转化时存在问题,double类型的数值占   用64bit,即64个二进制数,除去最高位表示正负符号的位,在最低   位上一定会与实际数据存在误差,简单来说就是我们给出的数值,在   大多数情况下需要比64bit更多的位数才能准确表示出来(甚至是需   要无穷多位),而double类型的数值只有64bit,后面舍去的位数一   定会带来误差,无法得到“数学上精确”的结果。

 四.动手动脑

  •    以下代码的输出结果是什么?

             int X=100;
             int Y=200;
             System.out.println("X+Y="+X+Y);
             System.out.println(X+Y+"=X+Y");

              技术分享图片

  •  为什么会有这样的输出结果?

           Java中的加号有时是连接符,有时是运算符:

           1>当左右两边连接的都是非数字型时,则为连接符。

           2>当一边是数值类型,另一边是非数值类型时,则为连接符。

           3>当两边都是数值类型时,则为运算符,即相加求和的作用。

Java枚举类型的使用,数值的二进制表示

原文:https://www.cnblogs.com/xp-thebest/p/11546048.html

(3)
(3)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!