在Java中,變量可以分為值類型和引用類型兩種。
值類型變量保存值本身,而引用類型變量保存的是一個(gè)指向內(nèi)存中對象的地址。
// 定義兩個(gè)值類型變量 int a = 10; double b = 3.14; // 定義一個(gè)引用類型變量 String str = "Hello World!";
在Java中,值類型變量在聲明的同時(shí)就會(huì)被初始化,因?yàn)樗鼈儽4娴氖侵当旧?,所以不存在空指針的問題。
而引用類型變量需要通過new關(guān)鍵字來創(chuàng)建對象,并且如果沒有賦值,它們的默認(rèn)值是null,意味著它們指向的是一個(gè)不存在的對象。
// 定義一個(gè)空的引用類型變量 Object obj = null; // 創(chuàng)建一個(gè)對象,并將引用類型變量指向它 obj = new Object();
此外,對于值類型變量,它們之間的賦值是直接將值賦給另一個(gè)變量,而對于引用類型變量,它們之間的賦值是將一個(gè)變量指向的對象的地址賦給另一個(gè)變量。
// 定義兩個(gè)值類型變量 int a = 10; int b = a; // 直接將a的值賦給b // 定義兩個(gè)引用類型變量 String str1 = "Hello"; String str2 = str1; // 將str1指向的對象地址賦給str2
需要注意的是,對于引用類型變量,它們指向的對象可以被多個(gè)變量共享,因此對于一個(gè)引用類型變量所指向的對象的修改,會(huì)影響到所有共享該對象的變量。
// 定義一個(gè)List對象,兩個(gè)引用類型變量共享它 List<String> list = new ArrayList<>(); List<String> list2 = list; // 向list中添加元素 list.add("Hello"); System.out.println(list2.get(0)); // 輸出"Hello"
以上就是Java中值類型和引用類型的區(qū)別,了解這些對于理解Java程序的運(yùn)行機(jī)制很有幫助。