【Java学习】java方法参数的值传递和引用传递
来源:互联网 发布:联想电脑怎么卸载软件 编辑:程序博客网 时间:2024/06/01 10:42
通俗的理解,传递值-传递值的副本;引用传递-传递引用的副本,对于值传递(传递的对象时基本数据类型),方法如果对该对象进行修改,那么原对象不变(原对象的地址与副本独立),对于引用传递(传递的对象是引用数据类型),传递的是引用的副本,就相当于复制了一个对象,仍然指向原来的内存地址,这时候对这个副本进行修改就会影响到原对象了!但是,如果在方法中给这个副本又创建了一个新的地址,那么就和原对象没有关系了。总结来说:要看方法中的操作是否改变了对象,就看原对象所指向的内存内容有没有改变!
下面给出值引用得例子:
public class Test { public static void main(String[] args) { // TODO Auto-generated method stub int x=1; alter(x); System.out.println(x); } public static void alter(int x){ x=10; }}
结果为:1
方法并没有改变变量x
下面是引用传递的例子(没有改变内存地址)
public class PrimaitivesTest { public static void main(String[] args) { // TODO Auto-generated method stub Person p=new Person(); p.setName("Liukang"); setName(p); System.out.println(p.getName()); } public static void setName(Person p){ p.setName("candid"); }}class Person{ private String name; public String getName() { return name; } public void setName(String name) { this.name = name; }}
结果:candid
对象p的name属性改变
下面是引用传递的例子(改变内存地址)
public class PrimaitivesTest { public static void main(String[] args) { // TODO Auto-generated method stub Person p=new Person(); p.setName("Liukang"); setName(p); System.out.println(p.getName()); } public static void setName(Person p){ //改变对象p的副本指向的内存地址 p=new Person(); p.setName("newName"); }}class Person{ private String name; public String getName() { return name; } public void setName(String name) { this.name = name; }}
结果:liukang
对象p的属性name没有改变
补充:String是引用类型,所以String传递的也是引用类型,但是使用String需要注意,如果将String作为方法参数
public static void main(String[] args){ String s="String"; alterString(s); System.out.println(s);}public void alterString(String s){ s="new String";}
像这样原来的String是不会改变,仍然是String,引用String是final类型的,所以不可以改变,s=”new String”就相当于新分配了内存,将改String对象指向了新的地址!所以想要通过调用方法对字符串进行修改的时候,一般使用StringBuffer类。
0 0
- Java 方法参数的值传递和引用传递
- 【Java学习】java方法参数的值传递和引用传递
- Java的方法的参数传递,值传递和引用传递还有String字符串传递
- Java方法参数的传递机制,值传递?引用传递?
- Java的参数传递有值传递和引用传递
- Java函数参数的值传递和引用传递
- java 学习 方法参数按值传递和按引用传递:
- 探究java方法参数传递--引用传递?值传递!
- java方法参数传递方式--按值传递、引用传递
- JAVA中参数传递(按值传递和引用传递)
- Java中的值传递和引用传递(参数传递)
- Java参数传递:值传递和引用传递
- [学习笔记]Java的值传递和引用传递,引用传递转值传递
- 关于JAVA方法的值传递和引用传递
- 【Java】官网中方法的值传递和引用传递
- Java方法的值传递和引用传递
- Java面向对象-方法的值传递和引用传递
- JAVA中方法参数的引用传递
- 编写可靠shell脚本的八个建议
- java整理
- C语言实现对半法查找的两种方法
- 为什么数组是从0开始的
- 枚举起始点Uva11059注意一个元素也是子序列
- 【Java学习】java方法参数的值传递和引用传递
- SpringMVC利用Column 注解约束double/float类型的精度
- |洛谷|分治|数学|P1226 取余运算||快速幂
- Android博文阅读地址
- Node.js区块链茶座第一期圆满结束
- BZOJ 2326 [HNOI2011]数学作业
- POJ 1631 nlogn求LIS
- python提交表单时属性名重复问题的解决
- 欢迎使用CSDN-markdown编辑器