(看这一篇就够了)基本数据类型的赋值与引用类型赋值的区别
生活随笔
收集整理的這篇文章主要介紹了
(看这一篇就够了)基本数据类型的赋值与引用类型赋值的区别
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
總結:
基本類型的變量值小,可直接拷貝;
對象包含多個值,不容易復制,賦值采用共享同一塊內存區域。
基本類型示例:
public class Test{public static void main(String[] args){int a = 5;//基本數據類型的賦值過程就是值拷貝的過程,將5這個值拷貝給aint b = 0;//同理,將0這個值拷貝給ab = a;//執行這一步時,將a的值拷貝給了b,b此時的值就是5b = 6;//將6這個值拷貝給了bSystem.out.println("a:" + a);//輸出 a:5System.out.println("b:" + b);//輸出 b:6} }從上面可以看出,修改 a或者b的值時,另一個變量的值不會受到任何影響
引用類型示例:
/*** 實體類(引用類型)*/ public class User{public int age;//int默認值為0 } public class Test{public static void main(String[] args){User u1 = new User();//u1的引用指向u1的引用User u2 = new User();//u2的引用指向u2的引用u1.age = 20;u2 = u1;//將u2的引用指向u1的引用,即 u2和u1共享同一個內存區域中的數據System.out.println("u1的age:" + u1.age);//輸出 u1的age:20System.out.println("u2的age:" + u2.age);//輸出 u2的age:20u2.age = 30;System.out.println("u1的age:" + u1.age);//輸出 u1的age:30System.out.println("u2的age:" + u2.age);//輸出 u2的age:30} }從上面可以看出,修改 u1.age或者u2.age的值時,另一個變量的值也會一起變化,因為它們所指向的數據是同一份數據
因為前面講到基本數據類型和引用數據類型存儲的方式不同(詳見開頭總結),所以因此在對數據進行修改時也會有不同
public class Test {public static void main(String[] args) {String name = "張三";int age = 8;String[] su = new String[]{"語文", "數學", "英語"};Student stu1 = new Student(age, name, su);/** 測試代碼* int是基本數據類型* String是比較特殊的引用數據類型* []數組是引用數據類型* */System.out.println("修改前輸出");System.out.println(age+"\t"+name+"\t"+ Arrays.toString(su));//直接調用方法修改數據stu1.直接修改基本數據類型(age);stu1.直接修改引用數據類型(name);stu1.直接修改引用數據類型2(su);System.out.println("修改后輸出");System.out.println(age+"\t"+name+"\t"+ Arrays.toString(su));System.out.println();System.out.println("修改前輸出");System.out.println(stu1.toString());//傳入引用數據類型修改stu1.修改引用數據中的基本數據類型(stu1);stu1.修改引用數據中的引用數據類型(stu1);stu1.修改引用數據中的引用數據類型2(stu1);System.out.println("修改后輸出");System.out.println(stu1.toString());} }class Student {//基本數據類型int age;//引用數據類型String name;//引用數據類型2String[] subject;public Student(){}public Student(int age, String name, String[] subject) {this.age = age;this.name = name;this.subject = subject;}@Overridepublic String toString() {return "Student{" +"age=" + age +", name='" + name + '\'' +", subject=" + Arrays.toString(subject) +'}';}public void 直接修改基本數據類型(int age) {age++;}public void 直接修改引用數據類型(String name) {name += "已修改";}public void 直接修改引用數據類型2(String[] su) {su[0] = "已修改";}public void 修改引用數據中的基本數據類型(Student stu) {stu.age += 2;}public void 修改引用數據中的引用數據類型(Student stu) {stu.name += "已修改2";}public void 修改引用數據中的引用數據類型2(Student stu) {stu.subject[0]="已修改";} }?輸出結果
?總結 :
( 一 ) int作為基本數據類型,是直接把一個值傳進方法體進行修改,
而String雖然是引用數據類型,但是因為其特殊性質,也有int這種基本數據類型直接把值拷貝一份傳入的特性,
而 [ ] 數組作為正常的引用數據類型,很明顯就是把存儲值的地址值傳入方法進行操作,進而在修改后影響了外部的數據值
(二) 后用 Student對象 ?存儲基本數據類型和特殊的String引用數據類型和正常的 [ ] 數組引用類型,然后進行修改其值,可以發現在外部調用的值都是修改后的結果,因為對象也是引用數據類型,把存儲值的地址值傳入方法,而方法根據地址值修改后,在外部調用的依舊是地址值鏈接的值
?
總結
以上是生活随笔為你收集整理的(看这一篇就够了)基本数据类型的赋值与引用类型赋值的区别的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: System.arraycopy
- 下一篇: 内存泄漏MobX State Tree_