先申明:java中的参数传递都是值传递,没有引用传递。
值传递的概念:值传递会为所传递的对象(这里的对象不是java里的对象object,而是一般意义上的对象)重新开辟一块空间,于是对所传对象的操作不会影响到原对象。
现象:有种说法是java中基本数据类型作参数是值传递,对象做参数是引用传递,我理解他的想法,在此不做任何评论。
理解:为什么对象做参数也是值传递呢?
分析:对象做参数传递的是对象的引用,暂且可以理解成对象的地址。由于是值传递,那么被传递的对象本身是不会有任何变化的,所以该对象的引用是不会发生任何变化的。
public class Yangkl
{
public void call(Test t)
{
Test t2 = new Test();
t2.setName("cba");
t.setName("abc");
System.out.println(t.name);
//这里改变了t,也就是t所代表的地址发生了变化,
//其实是所传对象的引用地址的复制发生了变化,本身对象的引用并没有变
//也就是说这里的值传递是把Test的引用作为值传递。
t = t2;
System.out.println(t.name);
}
public static void main(String args[])
{
Yangkl tYangkl = new Yangkl();
Test obj = new Test();
tYangkl.call(obj);
System.out.println(obj.name);
}
}
结果:abc
cba
abc
public class testClone {
public void changeA(A a){
a.name="b";
}
public void changInt(int i){
i=i*2+100;
}
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
testClone test=new testClone();
A a=new A();
a.name="a";
System.out.println("before change : a.name="+a.name);
System.out.println("before change : a.hashcode="+a.hashCode());
test.changeA(a);
System.out.println("after change : a.name="+a.name);
System.out.println("before change : a.hashcode="+a.hashCode());
int i=1;
System.out.println("before change : i="+i);
test.changInt(i);
System.out.println("after change : i="+i);
A a1=new A();
A a2=new A();
System.out.println("a1.hashCode="+a1.hashCode());
System.out.println("a2.hashCode="+a2.hashCode());
a1.name="a1";
a2=a1;
System.out.println("a1.hashCode="+a1.hashCode());
System.out.println("a2.hashCode="+a2.hashCode());
a2.name="a2";
System.out.println("a1.name="+a1.name);
System.out.println("a2.name="+a2.name);
}
}
class A {
public String name;
}
结果:
before change : a.name=a
before change : a.hashcode=18508170
after change : a.name=b
before change : a.hashcode=18508170 虽然说a.name不同了,但是引用还是一个引用,所以这里是把引用做为值传递的。
before change : i=1
after change : i=1
a1.hashCode=17237886
a2.hashCode=8187137
a1.hashCode=17237886
a2.hashCode=17237886
a1.name=a2
a2.name=a2
分享到:
相关推荐
13.java参数传递之引用传递.zip13.java参数传递之引用传递.zip13.java参数传递之引用传递.zip13.java参数传递之引用传递.zip13.java参数传递之引用传递.zip13.java参数传递之引用传递.zip13.java参数传递之引用传递....
读者将学习Java中方法调用时的参数传递方式,并分别介绍基本类型和引用类型在参数传递过程中的特点和区别。 能学到什么: 学习Java中方法调用时的参数传递方式。 理解基本类型和引用类型在参数传递过程中的特点和...
读者将学习Java中方法调用时的参数传递方式,并重点探讨基本类型和引用类型在参数传递过程中的特点和区别。此外,我们还将介绍可变参数和返回值的使用方法。 能学到什么: 学习Java中方法调用时的参数传递方式。 ...
Java:按值传递还是按引用传递详细解说
java
java参数传递时到底是值传递还是引用传递分享.pdf
11.java参数传递.zip11.java参数传递.zip11.java参数传递.zip11.java参数传递.zip11.java参数传递.zip11.java参数传递.zip11.java参数传递.zip11.java参数传递.zip11.java参数传递.zip11.java参数传递.zip11.java...
62.java引用类型的参数传递.zip62.java引用类型的参数传递.zip62.java引用类型的参数传递.zip62.java引用类型的参数传递.zip62.java引用类型的参数传递.zip62.java引用类型的参数传递.zip62.java引用类型的参数传递....
58.java参数传递机制.zip58.java参数传递机制.zip58.java参数传递机制.zip58.java参数传递机制.zip58.java参数传递机制.zip58.java参数传递机制.zip58.java参数传递机制.zip58.java参数传递机制.zip58.java参数传递...
java参数传递时到底是值传递还是引用传递[归类].pdf
java 值传递和引用传递的比较区别,包括代码及详解
这里详细的说明了,java参数传递的过程,引用传递,值传递
Java的引用和函数参数传递Java的引用和函数参数传递Java的引用和函数参数传递Java的引用和函数参数传递
不管是按值传递还是按引用传递,都是把栈中的数据备份了一份给参数变量,只不过值类型备份的是具体的数值,而引用类型备份的是内存地址
这个在Java里面是经常被提起的问题,也有一些争论,似乎最后还有一个所谓的结论:“在Java里面参数传递都是按值传递”。事实上,这很容易让人迷惑,下面先分别看看什么是按值传递,什么是按引用传递,只要能正确理解...
关于Java参数传递的PPT,详细介绍参数传递的类型。彻底理解Java只有唯一传递方式——值传递。
Java面向对象值传递和引用传递Java面向对象值传递和引用传递Java面向对象值传递和引用传递Java面向对象值传递和引用传递
浅析Java引用类型和方法参数传递,浅析Java引用类型和方法参数传递
Java中传递对象时传递的并不是对象中的内容, 而是对象的地址。
当一个变量为一个参数传入方法内部的时候,会有两种不同的传递方式:值传递和引用传递。 值传递的特点:不管方法内部对传进去的参数作任何改变,也不会影响方法外部的变量的值 引用传递的特点:方法内部对传...