java中值传递和引用传递辨析
来源:互联网 发布:羽绒被 蚕丝被 知乎 编辑:程序博客网 时间:2024/05/02 21:38
说来惭愧,舍友的老婆学java,让咱给指导一下,结果出丑了。就起原因基础知识不扎实,也罢,努力吧,骚年。
有人说java中只有值传递,没有引用传递。有人持反对意见,反正各自有各自的理论,其实这都不重要,重要的是
理解其中的原理,没有必要抠字眼。
public class ThisEscape {
public static void main(String[] args) {
ThisEscape te= new ThisEscape();
te.fromStr();
}
public void fromStr(){
int i = 0;
String str = new String("123");
Person person=new Person("Tom");
List<String> list= new ArrayList<String>();
toStr(i,str,person,list);
System.out.println(i);
System.out.println(str);
System.out.println(person.name);
System.out.println(list.size());
}
public void toStr(int i ,String str,Person person,List list){
i=1;
str="234";
person.name="Cat";
list.add("list");
}
}
class Person{
public String name;
Person(String str){
this.name=str;
}
}
结果:
0
123
Cat
1
结论:int类型和String类型的值没有改变,实例对象的变量发生了改变。
函数的参数进行传递是分两类:
基本数据类型和String对象(特殊总是它)进行传递时,使用的是值传递,其余以外的是引用传递。
再进一步,其实与数据的存储有关。
基本数据类型存储在栈内存中,在进行函数参数传递时,将存储单元中的数值传递给函数,成为局部变量,
当调用完成后,局部变量销毁,与被传递的参数无关。String首先不是类型,确切的说是对象,他是java的
干儿子,特殊对待,处理的时候模式和基本类型这些亲儿子一样处理。最后就是其实值传递的是内存中的
值,而非地址或者引用。
至于实例被传递的时候,先说存储,new一个对象的时候,其实是分两步存储的,一部分存在栈中的引用变量,另一部分
则是存储在堆中的实体对象。此时调用函数传递对象时,传递的对象的引用,并非是实体对象。在函数内部的操作实际是
针对该对象引用变量的操作而非实体对象。你可以改变这个引用变量的指向实体对象,也可以对引用变量指向的实体进行
操作。
举一下例子,值传递引用给你可能只是一个面包,而引用传递给你的可能是一个购物卡,你可以用它买面包,也可以买牛奶。
基本数据类型就是各种口味的面包,String也是购物卡,不过他限定卡,只能用来换面包。
争论从来都有,我其实还是倾向于值传递和引用传递这两种称呼。
有人说java中只有值传递,没有引用传递。有人持反对意见,反正各自有各自的理论,其实这都不重要,重要的是
理解其中的原理,没有必要抠字眼。
public class ThisEscape {
public static void main(String[] args) {
ThisEscape te= new ThisEscape();
te.fromStr();
}
public void fromStr(){
int i = 0;
String str = new String("123");
Person person=new Person("Tom");
List<String> list= new ArrayList<String>();
toStr(i,str,person,list);
System.out.println(i);
System.out.println(str);
System.out.println(person.name);
System.out.println(list.size());
}
public void toStr(int i ,String str,Person person,List list){
i=1;
str="234";
person.name="Cat";
list.add("list");
}
}
class Person{
public String name;
Person(String str){
this.name=str;
}
}
结果:
0
123
Cat
1
结论:int类型和String类型的值没有改变,实例对象的变量发生了改变。
函数的参数进行传递是分两类:
基本数据类型和String对象(特殊总是它)进行传递时,使用的是值传递,其余以外的是引用传递。
再进一步,其实与数据的存储有关。
基本数据类型存储在栈内存中,在进行函数参数传递时,将存储单元中的数值传递给函数,成为局部变量,
当调用完成后,局部变量销毁,与被传递的参数无关。String首先不是类型,确切的说是对象,他是java的
干儿子,特殊对待,处理的时候模式和基本类型这些亲儿子一样处理。最后就是其实值传递的是内存中的
值,而非地址或者引用。
至于实例被传递的时候,先说存储,new一个对象的时候,其实是分两步存储的,一部分存在栈中的引用变量,另一部分
则是存储在堆中的实体对象。此时调用函数传递对象时,传递的对象的引用,并非是实体对象。在函数内部的操作实际是
针对该对象引用变量的操作而非实体对象。你可以改变这个引用变量的指向实体对象,也可以对引用变量指向的实体进行
操作。
举一下例子,值传递引用给你可能只是一个面包,而引用传递给你的可能是一个购物卡,你可以用它买面包,也可以买牛奶。
基本数据类型就是各种口味的面包,String也是购物卡,不过他限定卡,只能用来换面包。
争论从来都有,我其实还是倾向于值传递和引用传递这两种称呼。
0 0
- java中值传递和引用传递辨析
- java中值传递 和 引用传递
- java中值传递和引用传递
- Java中值传递和引用传递问题
- java中值传递和引用传递
- Java中值传递和引用传递
- java中值传递和引用传递
- java中值传递和引用传递
- Java中值传递和引用传递实例
- Java中值传递和引用传递
- java中值传递和引用传递
- Java中值传递 引用传递
- 复习:java中值传递和引用传递(java基础教程)
- java中值传递和引用传递出现区别的原因
- java中值传递和引用传递的区别
- 再次学习java语言中值传递和引用传递
- JAVA中值传递和引用传递的三种情况
- java中值传递和引用传递的区别
- URAL 1513. Lemon Tale 好多大数
- pthread_mutex_t的使用
- MongoDB基本命令用
- ccombox说明
- WildFly LDAP设置
- java中值传递和引用传递辨析
- 第19条:接口只用于定义类型
- Eclipse NDK 配置
- Java编码规范
- play中配置oracle
- Java IO讀取(read)、寫入(write)與拷貝(copy)檔案
- 局域网访问计算机
- 通知机制 (Notifications)
- javascript相关小内容