14.Java 基础 - 参数传递
来源:互联网 发布:程序员壁纸手机壁纸 编辑:程序博客网 时间:2024/04/29 16:31
基本概念
在Java 中,参数传递机制有两种:传值、传址。
基本类型作为参数传递时,是传递值的拷贝,无论你怎么改变这个拷贝,原值是不会改变的;属于传值。
对象作为参数传递,是把对象在内存中的地址拷贝了一份传给了参数;属于传址。
实例探究
1.基本类型作为参数传递
public static void main(String[] args) { int n =3; // ① System.out.println(n); // 3 chageData(n); // ② System.out.println(n); // 3}public static void chageData(int num){ num = 10; // ③}
观察输出结果,发现 n 的值并没有改变。
因为 n,num 都是基本类型,所以值就直接保存在变量中。
流程图如下(对应代码中的①②③):
2.对象作为参数传递
首先来看 String 的例子:
public static void main(String[] args) { String str = "hello"; // ① System.out.println(str); // hello chageData(str); //② System.out.println(str); // hello}public static void chageData(String s){ s ="world"; // ③}
观察结果,发现 str 并没有发生改变。这里结合流程图来做下分析:
在 ① 执行完后,就会在堆中生成一个对象引用 str,里面存放的是地址索引,该地址指向内存中真正的 String 对象
在 ② 生成了对象引用 s ,通过传址引用,它也得到了 “hello” 的地址索引。
在 ③ 对对象引用 s 重新赋值。按理说应该是对象的值从 “hello” -> “world”。但是它却创建了一个的新的对象,原因就在于 String 的不可变性,因为一旦 String 发生变化就创建新的对象。
再来看 StringBuffer 的例子:
public static void main(String[] args) { StringBuffer stb = new StringBuffer("hello"); // ① System.out.println(stb); // hello chageData(stb); // ② System.out.println(stb); // hello world}public static void chageData(StringBuffer s){ s.append("world"); // ③}}
观察结果,发现 stb 发生了改变,因为 StringBuffer 对象是可变的,改变它的内容不会创建出新的对象
0 0
- 14.Java 基础 - 参数传递
- java基础 传递参数
- Java基础-参数传递
- Java基础-参数传递问题
- JAVA基础--参数传递问题
- [Java基础]java中函数参数传递
- Java基础:参数传递(一)
- Java基础:参数传递(二)
- Java基础:参数传递(三)
- Java SE 基础:方法的参数传递
- JAVA基础之方法参数传递
- Java基础——详解Java中的String参数传递
- Java基础(五)Java中的参数传递机制
- java学习之基础篇 参数传递[转]
- java小基础(1)关于参数传递
- java基础之函数参数传递过程解析
- java基础——方法参数的值传递机制
- Java基础(六)方法与参数传递
- Web系统大规模并发——电商秒杀与抢购
- TGA文件格式整理
- HDU 4632 Palindrome subsequence (区间DP)
- 使用RxBinding响应控件的异步事件
- java:String使用equals和==比较的区别
- 14.Java 基础 - 参数传递
- cocos2dx ClippingNode实现stencil效果
- win7 writefile写磁盘失败解决
- hdu3605(网络流+状态压缩)
- 关于视频流的各种问题,后续整理
- PLSQL之游标
- AS首次安装启动
- java笔试细节总结(一)
- 机器学习中的数学(2)-线性回归,偏差、方差权衡