Java函数参数传递例子
来源:互联网 发布:淘宝店铺有几个橱窗 编辑:程序博客网 时间:2024/04/27 10:38
Java中所操作的对象其实都是操作对象的引用,object本身保存在“堆”中,而对象的“引用“保存在寄存器或“栈”中。Java语言是按值传递参数,按引用传递对象的;(应该就是如果是原始类型就拷贝值,如果是对象就拷贝引用,而不是真正对象本身。如果方法里面将其他引用赋值给他,其实改变的只是引用,不是对象本身。所以对象的值不变。如果方法里面改变他的值,那其实改变的就是对象本身。)实际上这个传入函数的值是对象引用的拷贝,即传递的是引用的地址值。另外,String类是final修饰的,不可变,它会在内存中在开辟一块新空间,所以最后的例子改不了string的值。
下面有两个例子:
1. 先定义一个类型Value
- public static class Value {
- private String value = "value";
- public String getValue() { return value; }
- public void setValue(String value) { this.value = value; }
- }
2. 写两个函数newValue和modifyValue:newValue会将入参指向一个新的对象,modifyValue会调用入参的setValue方法修改对象的value值。
- public static void newValue(Value value) {
- value = new Value();
- value.setValue("new value");
- System.out.println("In newValue, HashCode = " + value.hashCode() + ", value = " + value.getValue());
- }
- public static void modifyValue(Value value) {
- value.setValue("new value");
- System.out.println("In modifyValue, HashCode = " + value.hashCode() + ", value = " + value.getValue());
- }
3. 简单的测试代码
- public static void main(String[] args) {
- Value value1 = new Value();
- System.out.println("Before modify, HashCode = " + value1.hashCode() + ", value = " + value1.getValue());
- // 将value1指向新的Value对象
- newValue(value1);
- System.out.println("After modify, HashCode = " + value1.hashCode() + ", value = " + value1.getValue() + "\n");
- Value value2 = new Value();
- System.out.println("Before modify, HashCode = " + value2.hashCode() + ", value = " + value2.getValue());
- // 使用object的set方法,修改对象的内部值
- modifyValue(value2);
- System.out.println("After modify, HashCode = " + value2.hashCode() + ", value = " + value2.getValue());
- }
4. 执行结果日志:
- Before modify, HashCode = 12677476, value = value
- In newValue, HashCode = 33263331, value = new value
- After modify, HashCode = 12677476, value = value
- Before modify, HashCode = 6413875, value = value
- In modifyValue, HashCode = 6413875, value = new value
- After modify, HashCode = 6413875, value = new value
示例2:
示例3:
public class Test3 { public static void change(int []a){ a[0]=50; } public static void main(String[] args) { int []a={10,20}; System.out.println(a[0]); change(a); System.out.println(a[0]); }}
显然输出结果为10 50。实际传递的是引用的地址值。
内存分析:
示例4:
class Emp { public int age;}public class Test { public static void change(Emp emp) { emp.age = 50; emp = new Emp();//再创建一个对象 emp.age=100; } public static void main(String[] args) { Emp emp = new Emp(); emp.age = 100; System.out.println(emp.age); change(emp); System.out.println(emp.age); System.out.println(emp.age); }}
输出为:100 50 50.
内存分析:
对于String类:
public class Test { public static void change(String s){ s="zhangsan"; } public static void main(String[] args) { String s=new String("lisi"); System.out.println(s); change(s); System.out.println(s); }}
输出为:lisi lisi,由于String类是final修饰的,不可变,它会在内存中在开辟一块新空间。
0 0
- Java函数参数传递例子
- java函数参数传递
- Java 函数参数传递分析
- java函数参数传递方式
- java函数参数传递问题?
- java 函数参数传递解释
- Java函数参数传递方式
- JAVA 是参数传递 不是引用传递 例子
- Java函数传递参数:值传递还是引用传递
- [Java基础]java中函数参数传递
- javascript 动态绑定函数的参数传递例子
- java中函数参数的传递
- Java函数参数是值传递的
- java 函数参数的传递问题。
- Java中函数的参数传递
- Java函数参数是值传递的
- Java函数参数传递方式详解
- Java给Main函数传递参数
- day06总结
- 线段树区间求和——敌兵布阵
- 学习日记-多态
- 我的第一个OpenGL程序
- 【第20题】360校园招聘2015届技术类笔试题
- Java函数参数传递例子
- Lucene用标准分词器搜索索引
- python requests post多层字典问题
- 数据倾斜处理方法
- 7.jsp原理 指令 脚本
- 《程序设计实践》有趣的句子
- stl优化-3
- 93:Triangle
- linux下非root用户安装软件入门