admin 管理员组文章数量: 1086019
Java中的值传递和地址值传递
文章目录
- 1.基本数据类型【值传递】
- 2.引用数据类型【地址值传递】
- (1)情况1
- (2)情况2
1.基本数据类型【值传递】
2.引用数据类型【地址值传递】
(1)情况1
public class Demo {String str = "成员变量";char[] ch = {'a', 'b', 'c'};public void change(String s, char[] ch) {s += "局部变量";ch[0] = 'd';}public static void main(String[] args) {Demo demo = new Demo();demo.change(demo.str, demo.ch);System.out.println(demo.str);System.out.println(demo.ch);}
}
运行结果:
分析:str是引用数据类型,调用方法时将str对应的引用地址赋值给方法的参数s【此时str和s均指向同一个地址】,方法内部执行【 s += “局部变量”】,因为String是final修饰的不可变字符串,两对象相加后的新字符串与原字符串不是同一个对象,地址引用肯定不同,因此s会被重新赋值引用地址,此时str和s指向不同的地址,str指向原地址,s指向新地址
(2)情况2
public class Demo {String str = "成员变量";StringBuilder sb = new StringBuilder("成员变量");public void change(String s1, StringBuilder s2) {s1 += "局部变量";s2.append("局部变量");}public static void main(String[] args) {Demo demo = new Demo();demo.change(demo.str, demo.sb);System.out.println(demo.str);System.out.println(demo.sb);}
}
运行结果:
分析:调用方法时,方法参数s1和s2接收的都是地址引用值,但执行【 s1 += “局部变量”;】时,是将一个新对象的地址引用赋值给s1;而执行【s2.append(“局部变量”);】时,是将在原地址的基础上修改对象
本文标签: Java中的值传递和地址值传递
版权声明:本文标题:Java中的值传递和地址值传递 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.roclinux.cn/b/1686558040a10082.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论