数据类型:
java的数据类型分为:基本数据类型和引用数据类型
基本数据类型:
1.整形:byte、int、short、long
浮点型:float、double
字符型:char
布尔类型:boolean
2.引用数据类型:数组、String、类.......
int定义整型
int 不管在多少位的操作系统中都是4个字节
integer包装类可以认为这是个int类型的加强版本
java中int没有有符号和无符号一说
int:4个字节
long定义长整型
为了区分int和long类型,一般建议:long类型变量的初始量值之后加一个大写的L
long型变量所能表示的范围:这个数据范围远超过int的表示范围,足够绝大部分的工程场景使用
长整型不论在哪个系统下都占8个字节
long的包装类型为Long(包装类型指的是基本数据对应的类类型)
sout("Long.MAX_VALUE"); 打印长整型最大数(其他类型同理)
sout ("Long.MIN_VALUE"); 打印长整型最小数
short定义短整型
2个字节
byte:1个字节
浮点型变量
double双精度浮点型
小数比较特殊任何一个小数都没有精确的值
double在任何一个系统下都占8个字节
浮点数与整数在内存中的存储方式不同,不能单纯使用2^n的形式来计算
float单精度浮点型
float类型在Java中占4个字节,同样遵循IEEE 754标准,由于表示的数据精度范围小,一般工程上用到的浮点数都优先考虑double,不太推荐使用float,float的包装类型为Float
字符型
Java中的char字符类型是两个字节和C语言不同C语言里面是1个字节,因为一个中文汉字是两个字节所以在java中你可以给一个字符变量赋值为一个汉字,但是如果要打印该字符变量那么我们在执行javac时加上-encoding UTF-8选项即可
char的包装类型为Character
布尔类型
boolean布尔类型jvm没有明确他的大小不和和其他类型进行转换
boolean的包装类型为Boolean
类型转换
强制类型转换(显式)
int a=10;
long b=100L;
a=(int)b;强制类型转换也叫显示类型转换:缺点:你要为结果负责,因为可能会有数据的丢失
自动类型转换(隐式)
自动类型转换即:代码不需要经过任何处理,在代码编译时,编译器会自动进行处理。特点:数据范围小的转为数据范围大的时会自动进行。
int a=10;
long b=100L;
b=a; a的范围小,b的范围大,当将a赋值给b的时候,编译器自动将a提升为long类型,然后赋值
如果a=b; 编译器则会报错,因为long的范围比int范围大,会有数据丢失,不安全
注意事项:1.不同数字类型的变量之间赋值,表示范围更小的类型能隐式转换为范围较大的类型
2.如果需要把范围大的类型赋值给范围小的,需要强制类型转换,但可能会造成精度丢失
3.将一个字面值常量进行赋值的时候,java会自动针对数字范围进行检查
4.强制类型转换不一定能成功,不相干的数据类型之间不可以相互转换
类型提升
不同类型的数据之间相互运算时,数据类型小的会被提升到数据大的
1.int与long之间:int会被提升为long
2.byte与byte之间:byte会被提升为int(所以小于4个字节的变量都会被提升为4个字节)
由于计算机的CPU通常是按照4个字节为单位从内存中读写数据。为了硬件上实现方便,诸如byte和short这种低于4个字节的类型,会先提升成int,再参与计算。
类型提升小结:1.不同类型的数据混合运算,范围小的会提升成范围大的
2.对于short,byte这种比4个字节小的类型,会先提升成4个字节再运算
java的字符串类型
c语言中没有字符串类型但是Java中有为String
包装类型指的是基本数据对应的类类型,String不是基本数据类型所以他不是包装类型他是引用数据类型。
String str1="hello";
String str2="world";
sout("str1+str2");
+:字符串连接符