1. java两大数据类型
1.1 内置数据类型
Java共有八种基本类型。4个整数型,2个浮点类型,1个字符类型,1个布尔型。
1.1.1 八种基本数据类型
(1) byte
- 8位,有符号,二进制补码表示的整数
- 范围 -128(-2^7) ~ 127(2^7-1)
- 默认值 0
- byte a=16;
(2) short
- 16位,有符号,二进制补码表示的整数
- 范围 -32768(-2^15)~ 32767(2^15 - 1)
- 默认值 0
- short a=15;
(注:byte和short类型主要用于特定场合,如底层文件的处理或者需要控制占用存储空间量的大数组。)
(3) int
- 32位,有符号,二进制补码表示的整数
- 范围 -2,147,483,648(-2^31)~ 2,147,483,647(2^31 - 1)
- 默认值 0
- int a=14;
(4) long
- 64位,有符号,二进制补码表示的整数
- 范围 -9,223,372,036,854,775,808(-2^63)~ 9,223,372,036,854,775,807(2^63 -1)
- 默认值 0L
- long a=13L ('L’理论上不区分大小写)
(注:java没有任何无符号(unsigned)形式的int,short,long,byte类型。)
(5) float
- 32位,单精度,符合IEEE 754标准的浮点数,
- 符号位(S):1bit , 指数位(E):8bit , 尾数位(M):23bit
- 范围(近似) +/-3.40282347E+38F (有效位数6~7位)
- 默认值 0.0f
- float a=12.3f (注:float类型的数值有一个后缀F或f,没有后缀的浮点数值(如12.3)默认为double类型,如float a=12.3,表达式错误。)
(6) double
- 64位,双精度,符合IEEE 754标准的浮点数,三个特殊的浮点值(表示溢出:正/负无穷大,表示出错:NaN(不是一个数字,如一个正整数除以0结果位正无穷大,0/0或者负数的平方根结果为NaN)
- 符号位(S):1bit , 指数位(E):11bit , 尾数位(M):52bit
- 范围(近似) +/-1.79769313486231570E+308(有效位数为15位)
- 默认值 0.0d
- double a=11.3d
(7) boolean
- 1位,只有两个取值 false/true
- 默认值 false
- boolean a=true
- 在C++中,0等价于false,非0等价于true,而Java中则不是这样。如,if(x=0){…} ,在C++中可以正常编译运行,但在Java中将不能通过编译,因为表达式x=0不能转换为布尔值。
(8) char
- 16位,Unicode字符
- 范围 ‘\u0000’ ~ ‘\uffff’ (0 ~ 65535)
- 默认值 ‘\u0000’ ,空字符
- '\u’是转义序列,Unicode转义序列会在解析代码之前得到处理。如"\u0022+\u0022"实际上\0022在解析之前会转换成",所以会得到"“+”",也就是一个空串。
- 注释中的\u要当心,如 // \u00A0 is a newline , 这行注释会产生一个语法错误,因为\u00A0会被替换为一个换行符。再如 //Look inside c:\users , 也会产生一个语法错误,因为\u后面没有跟着4个十六进制数。
- 一些特殊的转义字符序列。
在C和C++中,int和long等类型的大小与目标平台有关,这对编写跨平台程序带来了很大难度;在Java中,所有的数值类型所占字节数量与平台无关。
1.1.2 数值类型间的转换
(1) 自动类型转换
(注:6个实心箭头表示无信息丢失的转换;3个虚箭头表示可能有精度损失的转换,如 int n=123456789; float f=n; // 此时 f= 1.234567892E8,123456789是一个大整数,它所包含的位数比float类型所能表达的位数多,因此,当将这个整型数值转换为float是,会失去一定的精度。不能对boolean类型进行类型转换。)
- 如果两个操作数中有一个是double类型,另一个操作数就会转换为double类型。
- 否则,如果其中一个操作数是float类型,另一个操作数将会转换为float类型。
- 否则,如果其中一个操作数是long类型,另一个操作数将会转换为long类型。
- 否则,两个操作数都将被转换为int类型。
(2) 强制类型转换
-
上图中箭头的逆变换和大转小都需要强转(大转小理解为精度高的转精度低的,占bit位多的转占bit位少的)。
-
浮点数转换到整数是直接舍弃小数部分,不是四舍五入。
-
整数的默认类型是 int。
-
小数默认是 double 类型浮点型,在定义 float 类型时必须在数字后面跟上 F 或者 f。
1.2 引用数据类型
-
引用数据类型分3种:类,接口,数组;
-
引用类型的变量类似于C++中的指针,引用类型指向一个对象,指向对象的变量是引用变量,变量被声明后,类型就不能被改变了。
-
所有引用类型的默认值都是null。
-
一个引用变量可以用来引用任何与之兼容的类型。
的变量类似于C++中的指针,引用类型指向一个对象,指向对象的变量是引用变量,变量被声明后,类型就不能被改变了。 -
所有引用类型的默认值都是null。
-
一个引用变量可以用来引用任何与之兼容的类型。
***学习菜鸟教程***