Java语言把数据类型分为基本类型和引用类型
一、基本类型
基本类型分为数值类型和boolean型
1.boolean型
boolean类型的变量的取值只能是true和false,例如下面的代码定义了一个boolean的变量a,他被赋值为true。
public class Test01 {
public static void main(String[] args) {
boolean a = true;
}
}
在Java的源程序中,不允许把整数或者null赋值给boolean的变量,这是与其他高级语言有区别的,例如以下代码。
public class Test01 {
public static void main(String[] args) {
boolean a = 0;
boolean b = null;
}
}
二者的报错类型相同,都是类型不匹配。
2.数值类型
数值类型又细分为整数类型,浮点数类型,字符类型。
整数类型
整数类型中包含btye,short,int,long
在定义一个变量时,我们应该选择哪种数据类型,要考虑实际的需求和程序的性能。
在Java语言中如果数学表达式中都是整数,那么表达式的返回值只能是int类型或者long类型,如果想把返回值赋给short或者byte类型的变量,就必须进行强制类型转换,例如下面的代码
public class Test01 {
public static void main(String[] args) {
byte a = 0;
a = a + 6;//编译报错,显示类型不匹配
a = (byte)(a + 6);//强制类型转换后,编译通过
short b = 0;
b = b + 7;//编译报错,显示类型不匹配
b = (short) (b + 7);//强制类型转换后,编译通过
}
}
字符类型
char是字符类型。在Java编程时有些特殊字符,假如不知道他的Unicode编码,,直接从键盘中输入会报错,为了解决这个问题,Java语言采用转义字符来表示特殊字符例如
public class Test01 {
public static void main(String[] args) {
char a = '\'';
System.out.println(a);//打印一个单引号
char b = '\\';
System.out.println(b);//打印一个反斜杠
char c = '\"';
System.out.println(c);//打印一个双引号
}
}
浮点类型
浮点类型分为float类型和double类型;float占4个字节,共32位,称为单精度浮点型;double占8个字节,共64位,称为双精度浮点型;在使用浮点型进行数学运算时,会导致一些误差,例如下面的程序
public class Test01 {
public static void main(String[] args) {
float a = 0;
for(int i=0;i<26;i++){
a+=0.1f;
}
System.out.println(a);//打印结果2.5999997
}
}
他与实际结果相差0.0000003。
double类型采用64位来表示浮点数,精确度比float类型要高,例如下面的程序
public class Test01 {
public static void main(String[] args) {
double a = 0;
for(int i=0;i<26;i++){
a+=0.1;
}
System.out.println(a);//打印结果2.600000000000001
}
}
他与实际结果相差0.000000000000001;
当浮点数强制转换成整数时,产生的舍入误差会更加严重,因为强制转换成整数类型时会舍弃非整数部分,例如
public class Test01 {
public static void main(String[] args) {
double a = 19.0 * 0.01;
System.out.println(a);//打印结果0.19
System.out.println((int)(a * 100));//打印结果18
}
}
二、引用类型
引用类型可以分为类引用类型、接口引用类型、数组引用类型,(所有的非基本数据类型都是引用数据类型)以下代码定义了三个引用变量
Work work;
java.lang.Runnable myThread;
int[] aArray;
其中work变量为类引用类型;myThread为接口引用类型,myThread是接口引用类型,是因为java.lang.Runnable是接口不是类;aArray为数组引用类型;类引用类型的变量引用这个类或者其子类的实例,接口引用类型的变量引用实现了这个接口类的实例,数组引用类型的变量引用这个数组类型的实例。
三、基本类型与引用类型的区别
1.存储位置
在方法中声明的变量
在方法中声明的变量可以是基本类型变量也可以是引用类型变量
当声明是基本类型变量时,其的变量名和变量值会放在Java虚拟机栈中;当声明的是引用变量时,所声明的变量是放在Java虚拟机的栈中,该变量所指向的对象是放在堆类存中的。
传递方式
值传递
基本数据类型赋值都属于值传递,值传递传递的是实实在在的变量值,是传递原参数的拷贝,值传递后,实参传递给形参的值,形参发生改变而不影响实参。
引用传递
引用类型之间赋值属于引用传递。引用传递传递的是对象的引用地址,也就是它的本身。引用传递:传的是地址,就是将实参的地址传递给形参,形参改变了,实参当然被改变了,因为他们指向相同的地址。
适用场景
基本数据类型适用于简单的数值计算和存储;
引用数据类型适用于需要共享数据或复杂数据结构的场景。