java中的数据传递方式
2022/8/23 1:55:18
本文主要是介绍java中的数据传递方式,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
java的传值方式
目录- 结论
- 分析
结论
首先说结论:java基本是值传递
分析
关于这个问题,其实一直以来都很有争论的,我也是为此查询了很多资料,在此发表一下自己的拙见。
我们从内存出发,两者的区别其实就是操作一块内存和新开辟一块内存的区别,知道了这个我们来看看“值传递”与“引用传递”这两个专有名词的意义
- 值传递: 会在传值过程中,将自身拷贝(复制)一份,赋给给新建的(临时)变量
- 引用传递:在传值过程中,本身其实并不会传递,传递的是实际参数的隐式引用
接下来我们分别试一下基本数据类型和引用数据类型(以下直接用对象称呼)以及String
基本数据类型
public static void updata(int value){ value = 100; System.out.println("形参" +value); } public static void main(String[] args) { int a = 50; System.out.println("a" +a); updata(a); System.out.println("a在执行函数updata后:"+a); }
执行结果
a50
形参100
a在执行函数updata后:50
基本数据类型为值传递,因此在方法内部修改的只是形参,在方法执行结束后,形参也被销毁,a并无任何改变
看看自己定义的对象
public class User { int id; String name; int age; public User(int id, String name, int age) { this.id = id; this.name = name; this.age = age; } @Override public String toString() { return "User{" + "id=" + id + ", name='" + name + '\'' + ", age=" + age + '}'; } } public static void updataUser(User user){ user.setId(2); user.setName("asd"); user.setAge(25); System.out.println(user); System.out.println(System.identityHashCode(user)); } public static void main(String[] args) { User user = new User(1,"qwe",24); //没有重写toString,会打印地址 System.out.println(user); System.out.println(System.identityHashCode(user)); updataUser(user); System.out.println(user); System.out.println(System.identityHashCode(user)); }
结果如下:
User{id=1, name='qwe', age=24}
460141958
User{id=1, name='qwe', age=24}
User{id=2, name='asd', age=25}
460141958
User{id=2, name='asd', age=25}
460141958
可以看出实参与形参的地址是一模一样的,数据修改是直接在源数据进行修改的
public static void main(String[] args) { // TODO Auto-generated method stub String str = "data1"; String str2 = new String("data2"); StringBuffer buffer = new StringBuffer("data3"); System.out.println("!!!!!1 str:=" + str + " str2:=" + str2 + " buffer:=" + buffer.toString()); dealData(str, str2, buffer); System.out.println("!!!!!2 str:=" + str + " str2:=" + str2 + " buffer:=" + buffer.toString()); } private static void dealData(String str, String str2, StringBuffer buffer) { str += "123"; str2 += "123"; buffer.append("123"); System.out.println("nerborn: str:=" + str + " str2:=" + str2 + " buffer:=" + buffer.toString()); }
这篇关于java中的数据传递方式的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-25JAVA语音识别项目项目实战入门教程
- 2024-11-25JAVA云原生项目实战入门教程
- 2024-11-25Java语音识别项目入门:新手必读指南
- 2024-11-25Java语音识别项目入门:轻松开始你的第一个语音识别项目
- 2024-11-25Java语音识别项目入门详解
- 2024-11-25Java语音识别项目教程:从零开始的详细指南
- 2024-11-25JAVA语音识别项目教程:初学者指南
- 2024-11-25Java语音识别项目教程:初学者指南
- 2024-11-25JAVA云原生入门:新手指南与基础教程
- 2024-11-25Java云原生入门:从零开始的全面指南