Java的基本数据类型
数据类型 | 字节数 | 取值范围(十进制) | 默认值 | 包装类 |
---|---|---|---|---|
byte | 1 | -2^7~(2^7-1) | 0 | Byte |
char | 2 | \u0000~\uffff | \u0000 | Character |
short | 2 | -2^15~(2^15-1) | 0 | Short |
int | 4 | -2^31~(2^31-1) | 0 | Integer |
long | 8 | -2^63~(2^63-1) | 0 | Long |
float | 4 | 3.4E-38~3.4E38 | 0.0F | Float |
double | 8 | 1.7E-308~1.7E308 | 0.0D | Double |
boolean | 未定义 | true/false | false | Boolean |
基本数据类型存储在栈上,栈上存取速度最快。
Java的包装类
包装类均位于java.lang包,基本数据类型所对应的包装类已在上表中列出。
包装类的主要用途:
1. 作为和基本数据类型对应的类类型存在,使基本类型也可以成为对象,方便涉及到对象的操作。
2. 包含每种基本数据类型的相关属性,如最大值、最小值等,以及相关的操作方法。
以Integer为例:
一、装箱(ValueOf()方法 装箱)
Integer i = 10;//valueOf方法 装箱
Integer i2 = (Integer)10;//显示装箱
Integer i3 = new Integer(20);//new 堆分配内存
二、拆箱(intValue()方法 拆箱)
int i2 = i;//intValue方法 拆箱
int i3 = (int)i;//显示拆箱
对于如下两段代码以及运行结果进行讨论
Integer i1 = 127;
Integer i2 = 127;
System.out.println(i1==i2);
System.out.println(i1.equals(i2));
Integer i1 = 128;
Integer i2 = 128;
System.out.println(i1==i2);
System.out.println(i1.equals(i2));
查看ValueOf()方法得知
对于第一段程序:i1=127,i2=127,满足这个if条件,i1i2均在缓存中,比较时i1i2均指向同一个地址,比较(i1.equals(i2))时比较的是两个对象的值,所以运行结果都为true。
对于第二段程序:i1=128,i2=128,不满足这个if条件,i1、i2均new了一个新的对象,new出的对象放在堆中不同的地址下,所以运行结果为false。比较(i1.equals(i2))时比较的是两个对象的值,所以运行结果为true。
数据类型的转换
byte
byte a=1;
int b=a;
double c=a;
char类型无符号位,与其他类型需要强制转换。
大类型转换为小类型也需要强制转换。
int d=2;
char e=(char) d;
short f=(short) d;
在运算的时候会自动转化为int,所以需要强制类型转换
byte a1 = 1;
byte a2 = 2;
byte a3 = (byte) (a1 + a2);
byte b = 1;
char ch =(char)b;//byte--->int--->char
引用类型
在java中类型可分为两大类:值类型与引用类型。值类型就是上述基本数据类型,而引用类型是指除了值类型之外的所有类型。引用类型由类型的实际值引用(类似于指针)表示的数据类型。如果为某个变量分配一个引用类型,则该变量将引用(指向)原始值。引用类型包括类,接口,委托和装箱值类型。基本类型只有一块在栈中的存储空间,引用类型有两块存储空间分别在栈,堆中。
equals的比较方法
1.
String str1 = "Tulun";
String str2 = "Tulun";
System.out.println(str1 == str2);
结果为true。
2.
String str3 = new String("Tulun");
String str4 = new String("Tulun");
System.out.println(str3 == str4);
结果为false。
3.
String str5 = new String("Tulun");
String str6 = "Tulun";
System.out.println(str5 == str6);
结果为false。
4.
String str7 = new String("Tulun");
String str8 = "Tu"+"lun";
System.out.println(str7 == str8);
结果为false。
5.
String str9 = new String("Tulun");
String str10 = "Tu"+new String("lun");
System.out.println(str9 == str10);
结果为false。
6.
char[] array = {'T','u','l','u','n'};
String str11 = new String(array);
String str12 = "Tulun";
System.out.println(str11 == str12);
结果为false。