基本数据类型

1. 整型



注意:Java 没有任何无符号(unsigned)形式的 int、long、short 或 byte 类型。

不同进制的表示形式:

  • 十六进制数值有一个前缀0x或0X(如0xCAFE)。
  • 八进制有一个前缀0,例如,010对应八进制中的8。很显然,八进制表示法比较容易混淆,所以建议最好不要使用八进制常数。
  • 从Java 7开始,加上前缀0b或0B就可以写二进制数。例如,0b1001就是9。
  • 另外,同样是从Java 7开始,还可以为数字字面量加下划线,如用(1_000_000或0b1111_0100_0010_0100_0000)表示一百万。这些下划线只是为了让人更易读。Java编译器会去除这些下划线。

2. 浮点型



可以使用十六进制表示浮点数值。例如,0.125=2^(-3)可以表示成0x1.0p-3。在十六进制表示法中,使用p表示指数,而不是e。注意:底数采用十六进制,指数采用十进制。指数的基数是2,而不是10。(我觉得这里很变态 - -| )

所有浮点数的计算都遵循 IEEE754 规范。表示溢出和出错情况的三个特殊的浮点数值:

  • 正无穷大(Double.POSITIVE_INFINITY)
  • 负无穷大(Double.NEGATIVE_INFINITY)
  • NaN(不是一个数字,Double.NaN)

判断是否是“非数值” if((Double.isNaN(x)) // check whether x is "not a number"

浮点数值不适用于无法接受舍入误差的金融计算中。例如,命令System.out.println(2.0-1.1) 将打印出 0.8999999999999999,而不是人们想象的0.9。这种舍入误差的主要原因是浮点数值采用二进制系统表示,而在二进制系统中无法精确地表示分数1/10。这就好像十进制无法精确地表示分数1/3一样。如果在数值计算中不允许有任何舍入误差,就应该使用BigDecimal类。

3. char 类型

char 类型原本用于表示单个字符。不过,现在情况已经有所变化。因为如今,有些 Unicode 字符可以用一个 char 值描述,另外一些 Unicode 字符则需要两个 char 值。(可以参考:·[字符集与编码(二)-编号vs编码/#UTF-16 为何变成变长了?](http://xiaogd.net/字符集与编码(二)-编号vs编码/#UTF-16 为何变成变长了?))强烈建议不要在程序中使用char类型。

char 类型的值可以表示为十六进制值,其范围从\u0000\uFFFF

补充:除了转义序列\u之外,还有一些用于表示特殊字符的转义序列,请参看下图。

所有这些转义序列都可以出现在加引号的字符字面量或字符串中。例如,'\u2122’"Hello\n"

转义序列\u还可以出现在加引号的字符常量或字符串之外(而其他所有转义序列不可以),例如:

public static void main(String\u0058\u005D args)

是符合语法规则的,因为\u0058 \u005D分别表示[ ]

Unicode转义序列会在解析代码之前得到处理。例如,"\u0022+\u0022"并不是一个由引号(U+0022)包围加号构成的字符串。实际上,\u0022会在解析之前转换为",这会得到""+"",也就是一个空串。

更隐秘地,一定要当心注释中的\u,例如:

  • 注释// \u00A0 is a newline会产生一个语法错误,因为读程序时\u00A0会替换为一个换行符。
  • 类似地,下面这个注释// look inside c:\users也会产生一个语法错误,因为\u后面并未跟着4个十六进制数。

4. boolean类型

整型值和布尔值之间不能相互转换。

5. 基本数据类型之间的转换

注:虚线箭头可能有精度的损失

5.1 自动转换

条件(需要2个条件同时满足):

  • 转换前的数据类型与转换后的数据类型兼容
  • 转换后的数据类型的表示范围比转换前的大

补充:任何类型的数据都可向 String 类型转换

  • 例:
System.out.println( "1 + 2 = " + 1 + 2 );
System.out.println( "1 + 2 = " + ( 1 + 2 ) );
  • 输出:
1 + 2 = 12
1 + 2 = 3

5.2 强制转换

(欲转换的类型) 变量名称
double x = 9.997;
int nx = (int) x; // 变量nx的值为 9。强制类型转换通过截断小数部分将浮点值转换为整型。

如果想对浮点数进行四舍五入运算,那就需要使用Math.round方法:

double x = 9.997;
int nx = (int) Math.round(x); // 现在,变量 nx 的值为10。当调用 round 的时候,仍然需要使用强制类型转换(int)。其原因是round 方法返回的结果为 long 类型,所以只有使用显式的强制类型转换才能够将 long 类型转换成 int 类型。

「JavaSE 重新出发」02.01 基本数据类型的更多相关文章

  1. 「JavaSE 重新出发」05.01.02 hashCode 方法、toString 方法

    hashCode 方法 散列码(hash code)是由对象导出的一个整形值(可以是负数).其是没有规律的,如果x与y是两个不同的对象,则x.hashCode()与y.hashCode()基本上不会相 ...

  2. 「JavaSE 重新出发」02. 数据类型与运算符

    「TOC」 Java 程序基本要求 Java 数据类型 基本数据类型 复合数据类型 运算符 逻辑运算符 位运算符 运算符优先级 Java 程序基本要求 public class : 一个 Java 文 ...

  3. 「JavaSE 重新出发」05.01.01 equals 方法

    equals 方法示例 // 代码来自<Java核心技术 卷I>P167 // 父类 public class Employee{ ... public boolean equals(Ob ...

  4. 「JavaSE 重新出发」05.01 继承

    继承 一个对象变量可以指示多种实际类型的现象被称为多态(polymorphism). 在运行时能够自动地选择调用哪个方法的现象称为动态绑定(dynamic binding). 如果是private方法 ...

  5. 「JavaSE 重新出发」02.02 引用数据类型

    引用(复合)数据类型 1. 枚举类型 例: 枚举类型 Size 的声明: enum Size { SMALL, MEDIUM, LARGE, EXTRA_LARGE }; 声明 Size 类型变量: ...

  6. 「JavaSE 重新出发」01. Java介绍

    「白皮书」关键术语 简单性(C++--) 面向对象 分布式 健壮性 安全性 体系结构中立 可移植性 解释型 高性能 多线程 动态性 Java 发展历程 SUN公司--Stanford Universi ...

  7. 「JavaSE 重新出发」05.02 泛型数组列表、包装类

    泛型数组列表 ArrayList 是一个采用类型参数(type parameter)的泛型类(generic class). java ArrayList<Employee> staff ...

  8. 「JavaSE 重新出发」05.03.02 在运行时使用反射分析对象

    在编写程序时,如果知道想要查看的域名和类型,查看指定的域是一个很容易的事,而利用反射机制可以查看在编译时还不清楚的对象域. java Employee tank = new Employee(&quo ...

  9. 「JavaSE 重新出发」05.03.01 利用反射分析类

    在 java.lang.reflect 包中有三个类 Field, Method 和 Constructor 分别用于描述类的域.方法和构造器. Class 类中的 getFields, getMet ...

随机推荐

  1. windows上上传代码到Github

    Repository name: 仓库名称 Description(可选): 仓库描述介绍 Public, Private : 仓库权限(公开共享,私有或指定合作者) Initialize this ...

  2. Sqlite基本命令集合(linux/fedora/ubuntu)

    注:fedora自带sqlite3,无需安装,直接输入命令sqlite3即可. ------------Ubuntu在命令行输入sqlite3,确认没有安装在进行--- 1.安装sqlite3 ubu ...

  3. 开源Android容器化框架Atlas开发者指南

    Atlas是古希腊神话中的天神,是波士顿动力公司的机器人,借助搜索引擎,得以发现这个名词背后许许多多的含义.在手机淘宝,Atlas是一个扎根于Android客户端的一个组件化容器框架,相比神话中用手和 ...

  4. Java使用反射通过对象属性获取属性的值

    代码: // 通过属性获取传入对象的指定属性的值 public String getValueByPropName(Student student, String propName) { String ...

  5. H5-移动端适配

    之前写H5页面也会遇到适配问题, 是通过媒体查询一点一点调整,始终觉得很繁琐,但一直也没去想想解决的办法. 今天专门花了一上午的时间来去研究.  小生只是刚踏入前端路的小白,对于网上各位大佬的讲解适配 ...

  6. [luogu3369] 普通平衡树(splay模板)

    题目描述 您需要写一种数据结构(可参考题目标题),来维护一些数,其中需要提供以下操作: 1.插入 xx 数 2.删除 xx 数(若有多个相同的数,因只删除一个) 3.查询 xx 数的排名(排名定义为比 ...

  7. [学习笔记] CS131 Computer Vision: Foundations and Applications:Lecture 9 深度学习

    深度学习 So far this week Edge detection RANSAC SIFT K-Means Linear classifier Mean-shift PCA/Eigenfaces ...

  8. u-boot启动代码start.S详解

    (1)定义入口.由于一个可执行的Image必须有一个入口点,并且只能有一个全局入口,通常这个入口放在ROM(Flash)的0x0地址,因此,必须通知编译器以使其知道这个入口,该工作可通过修改连接器脚本 ...

  9. javaScript - 面向对象 - ES5 和 ES6

    javaScript - 面向对象 - ES5 和 ES6 ES5之前用 构造函数 构造函数的特点 就是一个普通函数, 他的函数名要大写.: 带方法的写法: 原型的方式: prototype 为内置的 ...

  10. 读取bin文件,并且按结构体赋值打印

    目标:读取一个bin文件,并且将bin文件中的数据,按字节对齐赋值给结构体,并且打印出结构体的内容 目前思路是简单的先将bin文件数据一次性读到一个数组中,再将数组强制转换为结构体 ] FILE *f ...