基本型別賦值和普通物件賦值的不同

2021-09-12 01:11:21 字數 1724 閱讀 2068

物件賦值是reference(參考)賦值,而基本型別是直接值得拷貝。

package qwer;

public class asdf

int num1=5;

int num2=num1;

system.out.println("num1:" + num1 + ", num2:" + num2);

num2=10;

system.out.println("num1:" + num1 + ", num2:" + num2);

mynumber obj1=new mynumber();

mynumber obj2=new mynumber();

system.out.println(obj1.num);

system.out.println(obj2.num);

system.out.println("*****=接下來輸出新值*****");

obj2=obj1;

obj2.num=10;

system.out.println(obj1.num);

system.out.println(obj2.num);

}}

先對num1賦值為5,然後賦值num2等於num1,這時候num2等於5,當num2賦值為10時,第二個輸出num2為10,那num1為5。

因為num2等於num1時,num2指向乙個5,num1另指向乙個5,相當於拷貝過程,所以num2為10,num1為5.

定義了乙個obj1和乙個obj2,obj1指向乙個5,obj2指向另乙個5,obj1的指向賦給obj2,相當於obj2的指標指向的是和obj1的同乙個地方,而之前obj2指向的那個5就沒有指標指向了,當obj2賦值為10的時候,發現obj1賦值也為10了。

package qwer;

public class zxcv

int a=1,b=2;

swap(a,b);

system.out.println("a is :" + a + ", b is :" + b);

mynumber obj1=new mynumber();

mynumber obj2=new mynumber();

obj2.num=10;

swap(obj1,obj2);

system.out.println("obj1 is :" + obj1.num + ", obj2 is :" + obj2.num);

} public static void swap(int m,int n)

public static void swap(mynumber obj3,mynumber obj4)

}

第乙個交換程式:沒有達到效果,因為swap函式的形參是int型,int型是直接賦值的,相當於a=1,b=2,m=1,n=2,函式執行後a=1,b=2,m=2,n=1,只是m,n的值相互換了,但是a,b的值沒有改。

第二個交換程式:達到了效果。因為物件是比較龐大的,賦值是直接賦指標的,傳過去的就是obj1=obj3,obj2=obj4,即obj1和obj3指向同一塊記憶體,obj2和obj4指向同乙個記憶體,這樣最後的值就交換了。

總結:基本型別的變數值小,可直接拷貝;物件包含多個值,不容易複製,賦值採用共享同一塊記憶體區域,即指標指向同一記憶體區域,函式裡的區域性變數編譯器不會給預設值,需要自己初始化,不然會報錯,類的成員變數,編譯器會給預設值,可以直接使用。

01 基本型別的賦值與引用型別賦值的區別

var a 10 var b a console.log a的值是 a console.log b的值是 b 總結 基本型別的賦值 是把變數a的值 賦值乙份給b var obj1 var obj2 obj1 obj2.name 李四 console.log obj1的物件是 obj1 obj1的物件...

基本型別,引用型別的賦值原理和自身方法呼叫的方式

1.賦值 1.賦值直接儲存在棧中作為臨時變數使用 2.基本型別自身方法呼叫 1.不能直接使用基本型別的方法。2.除int,char外基本型別可以new來建立物件從而呼叫基本型別的方法。例 boolean bl new boolean true bl.booleanvvalue 引數可為boolean...

關於引用型別 陣列和物件的賦值

js中的陣列和物件都是引用型別,其實說白了,陣列的資料型別也是物件,因此我們在實際專案中需要注意,如果直接將乙個物件賦值給另乙個空物件,這個操作僅僅是讓兩個物件的指標指向了同乙個地方。此時的兩個物件中的任意乙個的值發生改變,勢必都會影響到另乙個。let arr1 1,2,3 let arr2 arr...