JAVA中数据类型
一、基本数据类型
- 数值型
- 整型
- byte 字节型 占一个字节 用8位存储数据 范围:-128~127 默认值0
- short 短整型 占2个字节 2^15 范围:-32768~32767 默认值:0
- Int 整型 占四个字节 范围:-2^31~2^31-1
- 从JDK1.7开始,允许数字中间插入_分隔数字,在编译时,自动省略。
- java 中整数默认为Int,默认值是0.
- long 长整形 占8个字节 需要在后面加L作为标识,默认为0L。
- 浮点型
- float 单精度 占4个字节 在后面加f作为标识 默认值:0.0F
- double 双精度 占8个字节 java中小数的默认类型 默认值:0.0
- 字符型
- char 占2个字节 0~65535
- 编码:阿斯科玛表—ASCII 0-127 西欧码表—ISO8859-1 0-255 GB2312—2个字节表示一个汉字 —GBK Unicode编码体系—UTF-8—3个字节表示一个字符—万国码表
- 转义字符:\t 制表符 \r 回车 \n 换行 \ 反斜杠 \’单引号 \”双引号
默认值: ‘\u0000’—以\u开头表示这个字符是它对应的UTF-8的编码
- 布尔型
- boolean true|false
- 注:
- java中数值类型都是有符号的。
- 整型
二、引用数据类型
- 类—class 接口—interface 数组—[]
三、数据类型的转换
- 隐式转换/自动类型转换
- 转换规律一:byte->short->int->long
- long l = 34;//34默认是int类型,int类型的值可以赋值给long类型—在int类型的而取值范围内,将值直接赋值给long类型,可以不加L
- float f = 3.2f;
double d = f; - 转换规律二:float->double
int i = 3;
float f = i; - 转换规律三:int->float,可能会产生精度损失
float f = -25;//true
float f = 25.0;//false
long l = 34;
float f = l ;—->true - 转换规律四:任何一个整型都可以赋值给浮点型的变量,但是可能产生精度损失
int->double—>会产生精度损失
char c = ‘e’;
int i = c; - 转换规律五:char -> int
//这两种写法在编译时期就已经转换成了对应的形式了
char c = 98;–true–> char c = ‘b’;
short s = ‘b’;–true—> short s = 98;
char c = -1; //编译报错
//分开编译的,编译完了char c = ‘b’; ‘b’已经以字符形式存在了内存中
//由于两句话是分开编译的,所以现在JVM已经不确定c变量所表示表示的字符是否在short类型的取值范围内了。
char c = ‘b’;
short s = c;–false
//编译完成之后s的取值已经存入内存中了,再次使用s的时候,不能按照对应的码表转换成字符,能确定这个数字是否在码表的范围内吗?
short s = 100;
char c = s;
因为两句话是分开编译的,所以无法确定范围。
- 转换规律一:byte->short->int->long
注:各个基本类型之间是平等的,不存在大小或者说是父子关系。
2. 显示转换/强制类型转换
1. 当把大的类型转换为小的类型的时候,需要强制转换
float f = 3;->3.0f
int i = (int)f;
double d = 3.8;
int i = (int)d;-> i = 3;
当把浮点型数据转换为整型变量的时候,需要强制类型的转换。小数转换成整数的时候,不是四舍五入,而是舍弃掉小数部分。因此,小数转换整数的时候,也会产生精度损失。
注意:在计算机中,绝大部分小数是没办法精确保存的