java枚举数字_Java枚举类型的使用,数值的二进制表示
一.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枚举类型的使用,数值的二进制表示相关推荐
- java枚举数字_Java 枚举 通过数字实例化枚举类型
package com.zjl.domain.enumtype; /** * 枚举类 * * @Author zjl * @Date 2018/06/27 */ public enum EnumTyp ...
- java枚举 数字_java 枚举
Java中枚举的线程安全性及序列化问题 --枚举是如何保证线程安全的 要想看源码,首先得有一个类吧,那么枚举类型到底是什么类呢?是enum吗?答案很明显不是,enum就和class一样,只是一个关键字 ...
- c#枚举数字转枚举_C#枚举能力问题和解答 套装4
c#枚举数字转枚举 1) What is the correct output of given code snippets in C#.NET? using System; class progra ...
- java枚举类型转换_java枚举类型enum值与整数的转换
java编程中偶尔会用到枚举,为了直观,我们通常将枚举值设置为形象的单词,方便理解和使用.枚举类型相当于数据库 中字典表,但是枚举只有字典表的值,缺少其他用来表示和值一一对应的字段,当我们在数据库中保 ...
- java 枚举转换_Java 枚举与字符串的转换
原标题:Java 枚举与字符串的转换 (点击上方公众号,可快速关注) 来源:xieyu_zy 链接:blog.csdn.net/xieyuooo/article/details/8483267 文章简 ...
- java输入枚举型_Java 枚举型为什么是静态的,以及是怎么实现的?
确实,枚举类型总让我们觉着怪怪的,无论是语法还是静态非静态,还是操作方法,总让人觉着它和数组.列表等格格不入.那到底是为什么呢? 我们从本质分析下java的枚举类型. 1 枚举类型初探 枚举类型,其语 ...
- java enum 变量_java枚举使用详解
package com.ljq.test; /** * 枚举用法详解 * * @author jiqinlin * */ public class TestEnum { /** * 普通枚举 * * ...
- java 枚举 大小_Java枚举入门
枚举类(掌握) 枚举的诞生历史(了解) 在服装行业,衣服的分类根据性别可以表示为三种情况:男装.女装.中性服装. private ? type: public void setType(? type) ...
- java 枚举 注解_Java枚举类和注解梳理
1. 枚举类 1. 枚举类的使用 枚举类的理解:类的对象只有有限个,确定的.我们称此类为枚举类. 当需要定义一组常量时,强烈建议使用枚举类. 如果枚举类中只有一个对象,则可以作为单例模式的实现方式. ...
最新文章
- java wait abc_java----wait/notify
- mysql 获取姓名首字母_MySQL取姓名的首字母
- 在 Windows 10 中开启移动 WLAN 热点
- XML 命名空间(XML Namespaces)介绍以及节点读取方法
- vba 跳到下一个循环_VBA野知识分享:从一个数组中取部分值生成新数组,不使用循环的思路...
- django批量修改table_Django 数据库表多对多的创建和增删改查
- 介绍三种将二进制字节字符转换为ASCII方法
- 移动app部分机型无法唤起h5支付宝支付_谜之wxs,uni-app如何用它大幅提升性能
- 数学--数论---欧拉筛 模板
- mysql左键关联_MySQL的:左键删除重复列加入,3个表
- geoda权重矩阵导入matlab,空间计量经济学-分析解析.ppt
- c++矩阵转置_lt;读书笔记4gt; 稀疏矩阵基础算法
- SQLserver2008全文检索使用方法
- python不好用_Python用不好?看官方中文文档啦
- 深圳市区卫星地图 百度卫星地图高清版(含道路地名标签叠加)
- 开盘跳空是否透露超额收益?A股跳一跳因子挖掘
- 面试后要请你吃饭_请面试官吃饭应该聊些什么?
- FusionCharts Free
- ios共享账号公众号_【IOS游戏账号共享】江湖霸图
- 【方案分享】自助彩票终端布局商场,彩票行业智能营销新模式
热门文章
- Farrago for Mac(音频编辑软件)
- 朝辞白帝彩云间,千里江陵一日还
- 联通30日开售iPhone:只售999部 (每日关注10.27日)
- python工资一般多少-成都python工资收入多少
- Weibull Distribution韦布尔分布的深入详述(4)源码实践和实例
- Unity工程由2017升级到高版本提示UnityEngine.GUITexture与UnityEngine.GUIText被移除
- python写文件字母_不能错过!详解Python文件读写。
- 【MySQL数据库】MySQL的卸载
- C4D R26 渲染学习笔记 建模篇(3):生成器
- 网上阅卷源码有要的吗