一、基本類型和引用類型理解
在java中分爲兩種類型:1、基本數據類型(內置數據類型)
2、引用數據類型
1、基本數據類型(內置數據類型)java提供了八種基本類型,分別爲
byte、shot、int、long、float、double、boolen、char、
2、引用類型
引用類型變量保存引用值,引用的爲對象的內存空間地址,通過‘首個地址’來操作對象。
注意:基本數據類型保存在’棧’中,引用保存在’堆’中,所以"= ="比較的是’棧’是否相等,只有基本類型才能用==來判斷。
二、值傳遞和引用類型的區別
示列1:值傳遞public class JavaParamsType {
private static final int num = 5;
public static void main(String[] args) {
System.out.println("值引用前__before:" + num);
JavaParamsType.changeValue(num);
System.out.println("值引用後__after:" + num);
}
//擴大值10倍
private static void changeValue(int value) {
value = 10 * value;
//System.out.println(value);
}
}
如上圖代碼輸出結果:
值引用前__before:5、值引用後__after:5
分析:
1):value被num拷貝值爲5
2):value乘10後變爲50,並未指向num此時依然爲5。
3):方法結束後,value被棄用回收。
結論:當傳遞參數爲基本數據類型,方法不可修改一個基本數據類型參數。
示列2:引用調用
private static UserTestBo userTestBo = null;
public static void main(String[] args) {
userTestBo = new UserTestBo("番茄", "34");
System.out.println("對象引用前__before:" + userTestBo.getUserName() + userTestBo.getUserAge());
changeUser(userTestBo);
System.out.println("對象引用後__aefter:" + userTestBo.getUserName() + userTestBo.getUserAge());
}
//修改值方法
private static void changeUser(UserTestBo user) {
user.setUserName("土豆");
user.setUserAge("18");
}
如上圖代碼輸出結果:
對象引用前__before:番茄34、對象引用後__aefter:土豆18
分析:
1)userBo初始引用初始化的地址對象,並賦默認數值。
2)userBo拷貝一份給user,user採用set修改內部值。
3)方法結束後,釋放user對象,而userBo依然指向user對象,且值已修改。
結論:當傳遞參數類型爲引用類型時,一個方法將修改引用對象所指向的值。
區別:前者不會修改引用對象的值,後者會修改引用對象的值,
雖然以上示例說明:
java存在引用調用,但是java中確實只有按值調用而沒有按引用調用。
之所以能夠修改數據,只是同時指向了一個對象,這依然時按值調用,非按引用調用。