传值&传址之异同小析
来源:互联网 发布:中原电子 知乎 编辑:程序博客网 时间:2024/04/29 22:09
传值or传址,这是一个问题,也是一个比较简单的问题。
一般人们学习时,总喜欢把问题细节化,对于两个事物,非要追根究底,找出其不同之处。其实准确说来,传址也是一种传值,不过传的是地址的值而已,非人脑所能轻易识别,因此区别开来也是有理可循的。
关于这个话题,首先必须说明的一点就是:String只传值不传址!
值传递的一个简单例子:
public class swap {public void swap(int i,int j){int temp=i;i=j;j=temp;}}
public class Manager {/** * 入口点函数 * @param args */public static void main(String[] args){swap st=new swap();//创建对象int i=100;int j=20;System.out.println("First:i ~ j = "+i+" ~ "+j);//第一次输出//调用方法,在changeInt中改变i的值st.swap(i,j);System.out.println("Second:i ~ j = "+i+" ~ "+j);//第二次输出}}
输出结果:
First:i ~ j = 100 ~ 20Second:i ~ j = 100 ~ 20
在这个例子中,swap的作用就是将 i 和 j 的值互换,而从结果来看并未做到这点。 因为基本数据类型int传的是值。其实想要理解这个例子的话,可以将swap函数添加int返回值,返回 i ,并在此函数中输出 i ,就会发现在First和Second中间会输出一个:i = 20;这便可充分说明调用了swap(i,j);只是改变了其在class swap中的值,对Manager中的参数并无影响。
而若要证明String只传值不传址,只需定义一个String str=new String("abc");然后再定义一个类将str值赋给属性str,代码如下;
String str=new String("abc");test2 te=new test2(str);te.print();str="def";System.out.println("str2 = "+str);
test2类中
String str;public test2(String str){this.str=str;}public void print(){System.out.println("str = "+str);}
由String传值可知结果:
str = abcstr2 = def
在此不多做赘述。
址传递又称引用传递,所有用class,interface,abstract class定义的类和接口以及数组都属于引用类型。想看址传递的具体表现形式,只需自定义一个函数,然后用其创建对象,结果显而易见。举例如下:
public static void main(String[] args){Student st1=new Student();st1.setName("A");Student st2=new Student();st2.setName("B");Student st3=new Student();st3.setName("C");//进行交换st1=st2;st2=st3;st3=st1;String name=st3.getName();System.out.println("The name of st3 now is: "+name);
结果为“The name of str3 now is: B”, 从结果可看出,st3最终指向了st2对象,此处为传址。
0 0
- 传值&传址之异同小析
- linux&unix小技巧
- Java小白进阶之三---抽象类与接口的异同
- 中日茶道之异同
- C#之各类异同
- TBB基础之初始化&终止
- TBB基础之初始化&终止
- sql语句之IN&&EXISTS
- Ibatis 之 $ & #
- javascript小技巧&&JavaScript[对象.属性]集锦
- javascript小技巧&&JavaScript[对象.属性]集锦 [转载]
- javascript小技巧&&JavaScript[对象.属性]集锦[zz]
- C#与Java的一些小异同
- KM和OA之异同
- MoveWindow和SetWindowPos之异同!
- perl与php之异同
- SQL之waitfor & case
- [Java拾遗四]JavaWeb基础之Servlet_Request&&Response
- 类和对象【构造方法】
- Iframe 异步上传demo
- 查看spark on yarn的日志和程序状态的方法
- 数据结构stack的应用
- 浅谈继承
- 传值&传址之异同小析
- 数据类型
- Spark之我看(I)什么是RDD
- 菜鸟笔记#4.带壳破解
- 制作打包工具
- Java IO
- 集群上运行MR程序---备忘
- 不定宽高情况下的居中方法
- 《Android开发艺术探索》笔记