欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

(看这一篇就够了)基本数据类型的赋值与引用类型赋值的区别

发布时间:2024/10/8 编程问答 44 豆豆
生活随笔 收集整理的这篇文章主要介绍了 (看这一篇就够了)基本数据类型的赋值与引用类型赋值的区别 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

总结:
基本类型的变量值小,可直接拷贝;
对象包含多个值,不容易复制,赋值采用共享同一块内存区域。


基本类型示例:

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引用数据类型和正常的 [ ] 数组引用类型,然后进行修改其值,可以发现在外部调用的值都是修改后的结果,因为对象也是引用数据类型,把存储值的地址值传入方法,而方法根据地址值修改后,在外部调用的依旧是地址值链接的值

 

总结

以上是生活随笔为你收集整理的(看这一篇就够了)基本数据类型的赋值与引用类型赋值的区别的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。