本文摘自文章Java数据类型:基本数据类型和引用数据类型。
Java 语言支持的数据类型分为两种:基本数据类型(Primitive Type)和引用数据类型(Reference Type)。
1. 基本数据类型
基本数据类型包括 **boolean(布尔型)、float(单精度浮点型)、char(字符型)、byte(字节型)、short(短整型)、int(整型)、long(长整型)和 double (双精度浮点型)**共 8 种。
2. 引用数据类型
引用数据类型建立在基本数据类型的基础上,包括数组、类和接口。引用数据类型是由用户自定义,用来限制其他数据的类型。引用类型还有一种特殊的 null 类型。所谓引用数据类型就是对一个对象的引用,对象包括实例和数组两种。实际上,引用类型变量就是一个指针,只是 Java 语言里不再使用指针这个说法。
3. 区别
两者有一个很重要的区别就是当作为参数被传入方法时,在该方法中对基本数据类型的改变不会影响变量原来的值,而对引用类型的改变会影响变量原来的值。这一点有点像C++,如果直接传一个变量进入函数的时候,改变的其实是这个变量的副本,而如果传入变量的地址(指针)进去的时候,就会对变量本身做出改变了。多说无益,直接看下面的例子。
package ecnu.cn;
public class MyTest {
public static class ClassA {
private int x;
public int getX() {
return x;
}
public void setX(int x) {
this.x = x;
}
}
public static void func(String a, int b, double c, boolean d, String[] e, ClassA f) {
a = "9-09";
b = 890;
c = 678698.3432;
d = true;
for (int i = 0; i < e.length; i++) {
e[i] = "feoawf";
}
f.setX(8970);
}
public static void main(String[] args) {
String a = "1123123";
int b = 123;
double c = 10213.031;
boolean d = false;
String[] e = {"1", "2", "3", "4"};
ClassA f = new ClassA();
f.setX(23432);
System.out.println("传参前各个变量的值:");
System.out.println("String: " + a + " int: " + b + " double: " + c + " boolean: " + d + " String[]: " + e[0] + " class: " + f.getX());
func(a, b, c, d, e, f);
System.out.println("\n\n传参后各个变量的值:");
System.out.println("String: " + a + " int: " + b + " double: " + c + " boolean: " + d + " String[]: " + e[0] + " class: " + f.getX());
}
}
其输出为:
传参前各个变量的值:
String: 1123123 int: 123 double: 10213.031 boolean: false String[]: 1 class: 23432
传参后各个变量的值:
String: 1123123 int: 123 double: 10213.031 boolean: false String[]: feoawf class: 8970
可以发现基本数据类型都没有发生变化,而引用数据类型都发生了变化。