基本数据类型
2019-02-12 本文已影响0人
Kevin_Huang54
基础知识
共八种数据类型:4种整型(byte, short, int, long),2种浮点型(float,double),booean,char
类型 | 名称 | 占几个字节 | 范围 | 后缀、表示法 |
---|---|---|---|---|
整型 | byte | 1 | 2^8/2 = -128,最大-128~127 | 无,超过范围报错 |
整型 | short | 2 | 2^16/2 = 32767,-32768~32767 | 无,超过范围报错 |
整型 | int | 4 | 2^32/2 = 约21亿 | 无,超过范围报错,默认类型 |
整型 | long | 8 | 2^64/2 = 约1000亿亿 | l或L,如果不加则为int转换为long,大于int最大值时报错 |
浮点型 | float | 4 | 最大10^38 | 必须加f或F |
浮点型 | double | 8 | 最大10^308 | 无,超过范围报错,默认类型 |
布尔型 | boolean | 官方未公布 | true/false | |
字符型 | char | 2 | Java中使用UTF-16储存字符 |
整型的赋值
- 一个整数默认作为int类型处理
int i = 100
- 变量是long,小于int最大值,则引发自动类型转换,int转换为long
long i = 100
- 变量是long,大于int最大值,编译出错,数字必须加L
long i = 100000000000000000 //编译出错
long i = 100000000000000000L //编译通过
- 变量是byte、short、int,小于对应最大值,引发自动类型转换
short i = 10 //int类型的10自动转换为short
- 变量是byte、short、int,大于对应最大值,编译出错,可以强制类型转换,但数字会有变化。
short i = 10000000 //编译出错
short i = (short)10000000 //数字会被截断
字符型
Java中的char类型使用unicode,unicode是一个16位的字符集,最大容量65535,容纳了全世界所有书面语言的字符,Java采用UTF-16将unicode编码为16位数字,用于储存或传输。
char类型可以通过以下三种方式初始化:
char ch = 'A'
char ch = 65
char ch = '\u0041'
十六进制的0041就是A在unicode中的码点,十六进制0041的十进制数就是65
浮点数
- 浮点数有两种表示法:加小数点、用e
- 没有小数点和e的数值,都当作int
- float占4字节,32位,其中符号1位,尾数23位,指数8位(-128-127),底数为2,转为底数10后范围是±3.40E+38
- double占8字节,64位,其中符号1位,尾数52位,指数11位(-1024-1023),底数为2,转为底数10后范围是±1.79E+308
- 商业计算中需要精确表示一个数,推荐使用BigDecimal
- 还有三个特殊的数,
Infinity
、-Infinity
、NaN
,
1.0/0.0
会得到Infinity
,1/0
则会抛出异常
类型转换
- 数值范围小的类型会自动转换为范围大的类型,顺序如下:
byte-short-int-long-float-double
double d = 100, 打印输出100.0
- char比较特殊,可以自动转换为int和比int大的类型
int f = 'A', 打印输出65
float f = 'A', 打印输出65.0
- ""+任意基本类型,都会转换为String
- true + "ABC",输出trueABC
- 注意:2 + 3 + "ABC",输出5ABC
- 注意:"ABC" + 2 + 3,输出ABC23
- String转换为基本数据类型
- 基本类型都提供了各自的包装类:Integer、Float、Boolean等
- 除了char,其他都提供一个parseXxx(String str)方法将String转换为各自类型
int i = Integer.parseInt("100")
double i = Double.parseDouble("100.0")
- 基本类型转换为String
- 对所有基本类型,都可以采用String.valueof(任意基本类型)
- 更常用的,使用""+基本类型,即可转换为String
- 表达式中的类型转换
一个表达式的返回值总是表达式中最高级的那个数据类型
123d + 12,返回double类型
3 / 2, 返回int类型,1.5直接截断为1