一.Java枚举类型的使用

首先请看这段代码:

packagejava上课;public classEnumTest {public static voidmain(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”表示负,其余位表示数值的大小。

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

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

实例可以看下面的图

位操作代码测试

packagejavatask;public classBinarySystem {public static voidmain(String [] args) {int a=9;

System.out.println(a<<3);

System.out.println(a>>3);

System.out.println(a&3);

System.out.println(a|3);

System.out.println(~a);

System.out.println(a^3);int b=-9;

System.out.println(b<<3);

System.out.println(b>>3);

System.out.println(b&3);

System.out.println(b|3);

System.out.println(~b);

System.out.println(b^3);

}

}

运行结果:

Java用的是补码。

三.动手实验

请运行以下代码

packagejava上课;public classTestDouble {public static voidmain(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,后面舍去的位数一定会带来误差,无法得到“数学上精确”的结果。

四.动手动脑

Java变量遵循“同名变量的屏蔽原则”,请课后阅读相关资料弄清楚相关知识,然后自己编写一些测试代码,就象本示例一样,有意识地在不同地方定义一些同名变量,看看输出的到底是哪个值。

同名变量的屏蔽原则也就是 假如有一个全局变量与局部变量,会优先使用局部变量的值。看下面的代码

packagejavatask;public classTest2 {static int a = 3,b = 5;static int max(int a,intb) {intc;

c= (a > b) ? a : b; //这里的a,b是局部变量,其值决定于调用函数

return(c);

}public static voidmain(String [] args) {int a = 8;//这里的a是局部变量a = 8,b是全局变量b = 5,两值作为实参传给函数max()

System.out.println("max = "+max(a,b));

}

}

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

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枚举数字_Java枚举类型的使用,数值的二进制表示相关推荐

  1. java枚举数字_Java 枚举 通过数字实例化枚举类型

    package com.zjl.domain.enumtype; /** * 枚举类 * * @Author zjl * @Date 2018/06/27 */ public enum EnumTyp ...

  2. java枚举 数字_java 枚举

    Java中枚举的线程安全性及序列化问题 --枚举是如何保证线程安全的 要想看源码,首先得有一个类吧,那么枚举类型到底是什么类呢?是enum吗?答案很明显不是,enum就和class一样,只是一个关键字 ...

  3. c#枚举数字转枚举_C#枚举能力问题和解答 套装4

    c#枚举数字转枚举 1) What is the correct output of given code snippets in C#.NET? using System; class progra ...

  4. java枚举类型转换_java枚举类型enum值与整数的转换

    java编程中偶尔会用到枚举,为了直观,我们通常将枚举值设置为形象的单词,方便理解和使用.枚举类型相当于数据库 中字典表,但是枚举只有字典表的值,缺少其他用来表示和值一一对应的字段,当我们在数据库中保 ...

  5. java 枚举转换_Java 枚举与字符串的转换

    原标题:Java 枚举与字符串的转换 (点击上方公众号,可快速关注) 来源:xieyu_zy 链接:blog.csdn.net/xieyuooo/article/details/8483267 文章简 ...

  6. java输入枚举型_Java 枚举型为什么是静态的,以及是怎么实现的?

    确实,枚举类型总让我们觉着怪怪的,无论是语法还是静态非静态,还是操作方法,总让人觉着它和数组.列表等格格不入.那到底是为什么呢? 我们从本质分析下java的枚举类型. 1 枚举类型初探 枚举类型,其语 ...

  7. java enum 变量_java枚举使用详解

    package com.ljq.test; /** * 枚举用法详解 * * @author jiqinlin * */ public class TestEnum { /** * 普通枚举 * * ...

  8. java 枚举 大小_Java枚举入门

    枚举类(掌握) 枚举的诞生历史(了解) 在服装行业,衣服的分类根据性别可以表示为三种情况:男装.女装.中性服装. private ? type: public void setType(? type) ...

  9. java 枚举 注解_Java枚举类和注解梳理

    1. 枚举类 1. 枚举类的使用 枚举类的理解:类的对象只有有限个,确定的.我们称此类为枚举类. 当需要定义一组常量时,强烈建议使用枚举类. 如果枚举类中只有一个对象,则可以作为单例模式的实现方式. ...

最新文章

  1. java wait abc_java----wait/notify
  2. mysql 获取姓名首字母_MySQL取姓名的首字母
  3. 在 Windows 10 中开启移动 WLAN 热点
  4. XML 命名空间(XML Namespaces)介绍以及节点读取方法
  5. vba 跳到下一个循环_VBA野知识分享:从一个数组中取部分值生成新数组,不使用循环的思路...
  6. django批量修改table_Django 数据库表多对多的创建和增删改查
  7. 介绍三种将二进制字节字符转换为ASCII方法
  8. 移动app部分机型无法唤起h5支付宝支付_谜之wxs,uni-app如何用它大幅提升性能
  9. 数学--数论---欧拉筛 模板
  10. mysql左键关联_MySQL的:左键删除重复列加入,3个表
  11. geoda权重矩阵导入matlab,空间计量经济学-分析解析.ppt
  12. c++矩阵转置_lt;读书笔记4gt; 稀疏矩阵基础算法
  13. SQLserver2008全文检索使用方法
  14. python不好用_Python用不好?看官方中文文档啦
  15. 深圳市区卫星地图 百度卫星地图高清版(含道路地名标签叠加)
  16. 开盘跳空是否透露超额收益?A股跳一跳因子挖掘
  17. 面试后要请你吃饭_请面试官吃饭应该聊些什么?
  18. FusionCharts Free
  19. ios共享账号公众号_【IOS游戏账号共享】江湖霸图
  20. 【方案分享】自助彩票终端布局商场,彩票行业智能营销新模式

热门文章

  1. Farrago for Mac(音频编辑软件)
  2. 朝辞白帝彩云间,千里江陵一日还
  3. 联通30日开售iPhone:只售999部 (每日关注10.27日)
  4. python工资一般多少-成都python工资收入多少
  5. Weibull Distribution韦布尔分布的深入详述(4)源码实践和实例
  6. Unity工程由2017升级到高版本提示UnityEngine.GUITexture与UnityEngine.GUIText被移除
  7. python写文件字母_不能错过!详解Python文件读写。
  8. 【MySQL数据库】MySQL的卸载
  9. C4D R26 渲染学习笔记 建模篇(3):生成器
  10. 网上阅卷源码有要的吗