数据类型
基本数据类型
数值型
整型
byte---字节型----1个字节--8位-- -2^7 ~ 2^7-1 --- -128~127 (1个字节的取值范围背过)
byte b = -128;
默认值是0
short---短整型---2个字节--- -2^15 ~ 2^15-1 --- -32768~32767
默认值是0
int---整型-------4个字节(32位)--- -2^31 ~2^31-1
int i = 0b0011;
int i = 0x23;
//从JDK1.7开始,允许数字中间插入_分隔数字,在编译的时候,会自动省略_
int i = 100_000_000;
Java中整数默认就是int类型
默认值是0
long---长整型---8个字节
long l = 4L;
默认值是0L
浮点型
float---单精度---4个字节
float f = 3.2f;
默认值是0.0f
double---双精度(整数只有12位)---8个字节
Java中的小数默认就是double类型
double d = 4.5;
double d = 3.8D;
double d = 3e4;-> double d = 30000.0; e4=10^4
double d = 0x3p2;---十六进制的科学计数法的表示形式
默认值是0.0
注意:Java中的数值型类型都是有符号的。
字符型---char---2个字节--- 0-65535
编码:阿斯科玛表---ASCII 0-127 西欧码表---ISO8859-1 0-255 GB2312---2个字节表示一个汉字 ---GBK Unicode编码体系---UTF-8---3个字节表示一个字符---万国码表
char c = ‘f’;
char c = ‘中’;
转义字符
\t 制表符 \r 回车 \n 换行 \\ 反斜杠 \’单引号 \”双引号
默认值: ‘\u0000’---以\u开头表示这个字符是它对应的UTF-8的编码
布尔型---boolean---大小根据操作系统和JDK版本不同而定---true/false
默认值:false
引用数据类型
类---class 接口---interface 数组---[]
数据类型的转换
隐式转换/自动类型转换
规律一:小类型可以自动转化为大类型
byte b = 3;
int i = b;
float f = 4.2f
double d = f;
规律二:整数可以自动的转化为小数,可能会出现精度损失问题
int->float,可能会产生精度损失
float f = -25;//true(-25默认是int)
float f = 25.0;//false (25.0默认是double)
long l = 34;
float f = l ;---->true
注:为什么8个字节的long可以转换成4个字节的float?
long整型数,在内存中占用8个字节共64位,它表示的数值有2的64次方,平分正负,数值范围是负2的63次方到正2的63次方-1。
而float在内存中占4个字节,共32位,但是浮点数在内存中是这样的:
V=(-1)^s * M * 2^E
667x190
浮点数的32位不是简单的直接表示大小,而是按照一定的标准分配的。
说白了就是long型虽然占用8个字节,但是由于要非常严密精确的表达每一位数,
能够表达的数的范围,反倒没有占用4个字节的float型能够表达的数据范围大
规律三: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;
因为两句话是分开编译的,所以无法确定范围
char与short可以直接赋值,不可以互相转化,所以用红线表示。
各个基本类型之间是平等的,不存在大小或者说是父子关系。
显示转换/强制类型转换
int i = 5;
byte b = (byte)i;
当把大的类型转换为小的类型的时候,需要强制转换
float f = 3;->3.0f
int i = (int)f;
double d = 3.8;
int i = (int)d;-> i = 3;
当把浮点型数据转换为整型变量的时候,需要强制类型的转换。小数转换成整数的时候,不是四舍五入,而是舍弃掉小数部分。因此,小数转换整数的时候,也会产生精度损失。
注意:在计算机中,绝大部分小数是没有办法精确表示的