变量在内存中申请空间存储数值,内存管理系统根据变量类型分配空间存储整数、小数和字符。Java的两大数据类型:①内数据类型②引用数据类型
1.4.1内数据类型
Java提供八种基本类型,其中六种数字类型(四个整数型,两个浮点型),一种字符类型,一种布尔型。
①byte:byte 数据类型是8位、有符号的,以二进制补码表示的整数;最小值是 -128(-2^7);最大值是 127(2^7-1);默认值是 0;byte 类型用在大型数组中节约空间,主要代替整数,因为 byte 变量占用的空间只有 int 类型的四分之一;例子:byte a = 100,byte b = -50。
②short:short 数据类型是 16 位、有符号的以二进制补码表示的整数最小值是 -32768(-2^15);最大值是 32767(2^15 - 1);Short 数据类型也可以像 byte 那样节省空间。一个short变量是int型变量所占空间的二分之一;默认值是 0;例子:short s = 1000,short r = -20000。
③int:int 数据类型是32位、有符号的以二进制补码表示的整数;最小值是 -2,147,483,648(-2^31);最大值是 2,147,483,647(2^31 - 1);一般地整型变量默认为 int 类型;默认值是 0 ;例子:int a = 100000, int b = -200000。
④long:long 数据类型是 64 位、有符号的以二进制补码表示的整数;最小值是 -9,223,372,036,854,775,808(-2^63);最大值是 9,223,372,036,854,775,807(2^63 -1);这种类型主要使用在需要比较大整数的系统上;默认值是 0L;例子: long a = 100000L,Long b = -200000L;"L"理论上不分大小写,但是若写成"l"容易与数字"1"混淆,不容易分辩。所以最好大写。
⑤float:float 数据类型是单精度、32位、符合IEEE 754标准的浮点数;float 在储存大型浮点数组的时候可节省内存空间;默认值是 0.0f;浮点数不能用来表示精确的值,如货币;例子:float f1 = 234.5f。
⑥double:double 数据类型是双精度、64 位、符合IEEE 754标准的浮点数;浮点数的默认类型为double类型;double类型同样不能表示精确的值,如货币;默认值是 0.0d;例子:double d1 = 123.4。
⑦boolean:boolean数据类型表示一位的信息;只有两个取值:true 和 false;这种类型只作为一种标志来记录 true/false 情况;默认值是 false;例子:boolean one = true。
⑧char:char类型是一个单一的 16 位 Unicode 字符;最小值是 \u0000(即为0);最大值是 \uffff(即为65,535);char 数据类型可以储存任何字符;例子:char letter = 'A'。
注:实际上,Java加存在另一种基本运算符void,它也由对应的包装类java.lang.Void,但无法对其直接进行操作。
类型默认值:byte-0/short-0/int-0/long-0L/float-0.0f/double-0.0d/char-'u0000'/String(or any object)-null/boolean-false
注:char的默认最大最小值要转换为int类型,最小值为0,最大值为65535
1.4.2引用数据类型
1、类似于C/C++的指针,引用类型指向一个对象,指向对象的变量是引用变量;这些变量在声明时被指定为一个特殊的类型,如Employee、Puppy等,变量一旦声明,类型就不能更改。
2、对象、数组都是引用数据类型。
3、所有引用的默认值都是null。
4、一个引用变量可以用来引用任何与之兼容的类型。
5、例子:Site site=new Site("Nowcoder")。
1.4.3Java常量
常量在程序运行时不能被修改,在Java中使用final关键字来修饰常量,声明的方法与变量相似:
final double PI=3.1415927;
常量通常用大写表示,可以赋给任何类型的变量,byte、int、long、short都可以用十进制、8进制、16进制表示,使用常量时前缀0表示8进制,0x表示16进制:
byte a=68;
char a='A'
int decimal=100;
int octal=0144;
int hexa=0x64;
Java的字符串常量也是包含在两个引号之间的字符序列:
"Hello World"
"two\nlines"
"\"This is in quotes\""
字符串常量和字符常量都可以包含任何Unicode字符:
char a='\u0001';
String a="\u0001";
1.4.4自动类型转换
1、整型、实型(常量)、字符型数据都可以混合运算,运算中不同类型的数据先转化为同一类型再进行运算,转换从低级到高级:
低 ------------------------------------> 高
byte,short,char—> int —> long—> float —> double
注:①不能对boolean类型进行转换;②不能把对象类型转换成不想关类的对象;③不能把对象类型转成不相关类的对象;④转换过程中可能会溢出导致损失精度;⑤浮点数到整数直接舍弃小数,不会四舍五入。
2、自动类型转换必须满足转换前数据类型的位数要低于转换后的数据类型(位数只增不减)。
3、强制类型转换的条件是数据类型必须兼容,表示为(type) value type:
public class Test{
public static void main(String[] args){
int i1=123;
byte b=(byte) i1;//强制类型转换为byte
System.out.println("int强制类型转换为byte后的值等于"+b);
}
}
4、隐含强制类型转换:整数的默认类型是int