Java中对象作为参数传递到底是传值还是传引用一直在网上饱受争议 首先来看基本类型作为参数传递 输出 我们很明显地知道在Java中基本类型的传递是传值 再来看对象作为参数传递的第一个例子 输出 从这个例子可以知道在main函数中调用add函数,对象的属性发生了改变,两次输出结果不一样 对象作为参数传递的第二个例子 输出 为什么这里两次输出没有改变呢? 下面是对象作为参数传递的第一个例子中传参前后程序内存中的变化 下面是对象作为参数传递的第二个例子中传参前后程序内存中的变化 在第二个例子中,main函数中的变量s保存了字符串的地址,add函数中的变量s接收到了字符串的地址,这时程序又在堆中新建了一个字符串“Java后台开发 is a good offical account”,并将这个字符串的地址给add函数中的变量s。 所以结论是: 致力于原创计算机与软件开发知识及SSM、Spring cloud、Redis、微服务等Java后端开发技术Java参数传递到底是传值还是传引用
public class Test { public static void main(String[] args) { int a = 1; System.out.println("a = "+a); add(a); System.out.println("a = "+a); } public static void add(int a) { a++; } }
a = 1 a = 1
public class Test { public static void main(String[] args) { StringBuilder s = new StringBuilder("Java后台开发"); System.out.println(s); add(s); System.out.println(s); } public static void add(StringBuilder s) { s.append(" is a good official account"); } }
Java后台开发 Java后台开发 is a good official account
那我们这样就能简单的认为Java对象作为参数传递时是传引用吗?public class Test { public static void main(String[] args) { StringBuilder s = new StringBuilder("Java后台开发"); System.out.println(s); add(s); System.out.println(s); } public static void add(StringBuilder s) { s = new StringBuilder("Java后台开发 is a good official account"); } }
Java后台开发 Java后台开发
下面要引出程序中内存的变化来理解
在第一个例子中,main函数中的变量s保存了字符串的地址,add函数中的变量s接收到了字符串的地址,并通过这个地址在heap中找到“Java后台开发”这个字符串,并append另一个字符串,使得字符串前后发生了改变。
所以显而易见,原字符串不会发生改变。
Java中基本类型的参数传递是值传递,对象类型则是把对象的地址复制一份传给被调用函数。
当然也可以直接理解为Java中参数传递就是值传递,因为地址也就是一个数字,也可以说是值。欢迎关注微信公众号:Java后台开发
公众号里还有很多开发工具及学习资料
本网页所有视频内容由 imoviebox边看边下-网页视频下载, iurlBox网页地址收藏管理器 下载并得到。
ImovieBox网页视频下载器 下载地址: ImovieBox网页视频下载器-最新版本下载
本文章由: imapbox邮箱云存储,邮箱网盘,ImageBox 图片批量下载器,网页图片批量下载专家,网页图片批量下载器,获取到文章图片,imoviebox网页视频批量下载器,下载视频内容,为您提供.
阅读和此文章类似的: 全球云计算