一.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”表示负,其余位表示数值的大小。

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

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

实例可以看下面的图

  • 位操作代码测试
package javatask;

public class BinarySystem {
public static void main(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用的是补码。

三.动手实验

  • 请运行以下代码
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,后面舍去的位数一定会带来误差,无法得到“数学上精确”的结果。

四.动手动脑

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

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

package javatask;

public class Test2 {
static int a = 3,b = 5;
static int max(int a,int b) {
int c;
c = (a > b) ? a : b; // 这里的a,b是局部变量,其值决定于调用函数
return (c);
}
public static void main(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枚举类型的使用,数值的二进制表示的更多相关文章

  1. java 枚举类型分析

    最近做android开发,需要用到枚举值,这样可以连续赋值,我按之前c++那样书写,如下所示: public enum ColorSelect { RED_BAGE = 0, GREEN_BAGE, ...

  2. 【转】java枚举类型enum的使用

    原文网址:http://blog.csdn.net/wgw335363240/article/details/6359614 java 枚举类型enum 的使用 最近跟同事讨论问题的时候,突然同事提到 ...

  3. 【转】掌握java枚举类型(enum type)

    原文网址:http://iaiai.iteye.com/blog/1843553 1   背景 在java语言中还没有引入枚举类型之前,表示枚举类型的常用模式是声明一组具有int常量.之前我们通常利用 ...

  4. 转载 java枚举类型enum的使用 (原文地址:http://blog.csdn.net/wgw335363240/article/details/6359614)

    java枚举类型enum的使用 最近跟同事讨论问题的时候,突然同事提到我们为什么java中定义的常量值不采用enmu枚举类型,而采用public final static 类型来定义呢?以前我们都是采 ...

  5. Java 枚举类型简介

    目录 Java 枚举示例 Java 枚举构造函数 枚举类型是用于定义常量集合的特殊类型,更确切的说,JAVA枚举类型是一种特殊的 java 类.枚举类型可以包含常量.方法等.在 java5 中添加了 ...

  6. 【转载】Java枚举类型的使用

    枚举类型概念 package com.lxq.enumm; public class EnumDemoOne { private enum InnerEnum { RED, GREEN, YELLOW ...

  7. 深入理解Java枚举类型(enum)

    https://blog.csdn.net/javazejian/article/details/71333103 深入理解Java类型信息(Class对象)与反射机制 深入理解Java枚举类型(en ...

  8. Java枚举类型使用示例

    Java枚举类型使用示例 学习了:https://www.cnblogs.com/zhaoyanjun/p/5659811.html http://blog.csdn.net/qq_27093465/ ...

  9. java 枚举类型和数据二进制等问题思考

    .以下代码的输出结果是什么? int X=100; int Y=200; System.out.println("X+Y="+X+Y); System.out.println(X+ ...

随机推荐

  1. docker启动nginx的ssl配置

    前提条件 一台云服务器(阿里云.腾讯云等的centOS) 服务器上面要有docker(安装方法这里不做介绍) 一个域名 ssl证书(两个文件:一个key后缀,一个pem后缀:生成方法很多这里不再介绍) ...

  2. java架构之路-(dubbo专题)dubbo的基本使用

    今天我们来说一下dubbo的基本使用,没有什么高阶的知识,真的超级简单易懂. Dubbo核心功能解释 dubbo 阿里开源的一个SOA服务治理框架,从目前来看把它称作是一个RPC远程调用框架更为贴切. ...

  3. 使用MuMu模拟器调试AndroidStudio项目

    1.安装一款安卓模拟器 ​ 本例使用网易MuMu模拟器,因为目前网络上这类模拟器只有mumu的安卓版本是最新的,为6.0,安卓自带的Virtual Device虽然有很新的版本,但如果pc配置不是很高 ...

  4. linux设置服务器时间

    在 Linux 机器上有两种时钟: 由内核维持的软件时钟(又称系统时钟)和在机器关机后记录时间的(电池供电的)硬件时钟. 启动的时候, 内核会把系统时钟与硬件时钟同步. 之后, 两个时钟各自独立运行. ...

  5. 《Git 从入门到体系》- 写给自己的话

    我听过的对我很有冲击力的观点是:知识不成体系就是垃圾.这个观点不一定对,但是却是给我的冲击很大. 我记得以前在咖啡馆和一个博士医生聊天,他提出了这个观点:知识不成体系就是垃圾.听了这个观点我很想反驳他 ...

  6. Warning: curl_setopt() [function.curl-setopt]: CURLOPT_FOLLOWLOCATION cannot be activated when in safe_mode or an open_basedir is set…

    php打印小票错误提示:Warning: curl_setopt() [function.curl-setopt]: CURLOPT_FOLLOWLOCATION cannot be activate ...

  7. mysql升级后出现Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'userinfo.

    安装了mysql5.7,用group by 查询时抛出如下异常: Expression #3 of SELECT list is not in GROUP BY clause and contains ...

  8. [CF1311D] Three Integers - 数学

    Solution 枚举 \(a\),枚举 \(b\ s.t. a|b\),则 \(c\) 一定是 \([c/b]b\) 或 \(([c/b]+1)b\) #include <bits/stdc+ ...

  9. php ftp 使用 以及 php_connect_nonb() failed: Operation now in progress (115)

    设置 ftp_pasv($conn,true);  会出现下面错误   不设置 调用ftp 连接没问题  ftp_nlist  ftp_put ftp_get 等函数都不成功 ftp_nb_fput( ...

  10. Redis入门-02-CentOS7环境搭建

    CentOS7下redis安装过程,安装后需要开启端口号6379 #下载 wget http://download.redis.io/releases/redis-3.2.4.tar.gz #解压 t ...