基本类型赋值和普通对象赋值的不同
?對(duì)象賦值是Reference(參考)賦值,而基本類(lèi)型是直接值得拷貝。
package qwer;public class asdf {public static void main(String[] args) {class MyNumber{int num=5;}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("======接下來(lái)輸出新值=====");obj2=obj1;obj2.num=10;System.out.println(obj1.num);System.out.println(obj2.num);}}先對(duì)num1賦值為5,然后賦值num2等于num1,這時(shí)候num2等于5,當(dāng)num2賦值為10時(shí),第二個(gè)輸出num2為10,那num1為5。
因?yàn)閚um2等于num1時(shí),num2指向一個(gè)5,num1另指向一個(gè)5,相當(dāng)于拷貝過(guò)程,所以num2為10,num1為5.
定義了一個(gè)obj1和一個(gè)obj2,obj1指向一個(gè)5,obj2指向另一個(gè)5,obj1的指向賦給obj2,相當(dāng)于obj2的指針指向的是和obj1的同一個(gè)地方,而之前obj2指向的那個(gè)5就沒(méi)有指針指向了,當(dāng)obj2賦值為10的時(shí)候,發(fā)現(xiàn)obj1賦值也為10了。
package qwer; public class zxcv {public static void main(String[] args) {class MyNumber{int num=5;}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){int s=m;m=n;n=s;}public static void swap(MyNumber obj3,MyNumber obj4){int s=obj3.num;obj3.num=obj4.num;obj4.num=s;} }第一個(gè)交換程序:沒(méi)有達(dá)到效果,因?yàn)閟wap函數(shù)的形參是int型,int型是直接賦值的,相當(dāng)于a=1,b=2,m=1,n=2,函數(shù)運(yùn)行后a=1,b=2,m=2,n=1,只是m,n的值相互換了,但是a,b的值沒(méi)有改。
第二個(gè)交換程序:達(dá)到了效果。因?yàn)閷?duì)象是比較龐大的,賦值是直接賦指針的,傳過(guò)去的就是obj1=obj3,obj2=obj4,即obj1和obj3指向同一塊內(nèi)存,obj2和obj4指向同一個(gè)內(nèi)存,這樣最后的值就交換了。
總結(jié):基本類(lèi)型的變量值小,可直接拷貝;對(duì)象包含多個(gè)值,不容易復(fù)制,賦值采用共享同一塊內(nèi)存區(qū)域,即指針指向同一內(nèi)存區(qū)域,函數(shù)里的局部變量編譯器不會(huì)給默認(rèn)值,需要自己初始化,不然會(huì)報(bào)錯(cuò),類(lèi)的成員變量,編譯器會(huì)給默認(rèn)值,可以直接使用。
總結(jié)
以上是生活随笔為你收集整理的基本类型赋值和普通对象赋值的不同的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: kernel_mktime() 详解 —
- 下一篇: 故障解决:error while loa