Java的数据类型

数据类型:

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");

+:字符串连接符