我看到一个java面试题:
当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递
答:是值传递。Java 编程语言只有值传递参数。当一个对象实例作为一个参数被传递到方法中时,参数的值就是对该对象的引用。对象的内容可以在被调用的方法中改变,但对象的引用是永远不会改变的
那什么情况是引用传递??
当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递
答:是值传递。Java 编程语言只有值传递参数。当一个对象实例作为一个参数被传递到方法中时,参数的值就是对该对象的引用。对象的内容可以在被调用的方法中改变,但对象的引用是永远不会改变的
那什么情况是引用传递??
解决方案 »
- java里怎么取变量地址?
- sleep() 和Thread.sleep()疑惑,请大家指点!
- Java.io.File.length() 和 InputStream.available() 一样的吗?
- JAVA调用linux下的TOP命令问题
- 没分了,大家帮帮忙,谢谢了!
- 求解:如何使java应用只启动一次,如何停掉java应用程序?
- 使用URLConnection获取网页的问题
- 学习Java的好东东 Robocode,快来看哦,UP者有分
- 特急!!!!!!请看下面的代码为什么再Tomcat3.2下好使,再Tomcat4.0下不好使
- 有哪位朋友是做过java card的开发的,交流一下!
- 初次使用FreeTTS 的jsapi.jar 遇到问题
- JAVA有运算符重载吗?
属于c++或c的概念,就是直接把指针作为参数,
方法中是对指针的操作。
java中的对象全部都是引用传递吧,因为我们拥有的就是对象的引用啊,我们并不拥有对象本身,所以传递的时候只能传递引用。答案有错误哈
呵呵
Integer a=new Integer(1);
Integer b=new Integer(2);
swap(a,b);
System.out.println(a);
System.out.println(b);
}
public void swap(Integer a,Integer b){
//todo
//:)
}
它说是值传递的原因是:
比如对象A作为参数传递给一个方法,那么这个方法将复制一个对象(引用)B,A和B指向同一个内存空间。
所以,改变了B的指向的话,A的指向是不会改变的,当然A指向的内容也不会改变。
如果改变了B指向的内容的话,A的指向也不会改变,但A指向的内容就改变了。其实说是值传递,实质上就是指向是值传递!
C++中把直接传递内存中的值 如果不是一个地址 称为传值
C++中把直接传递内存中的值 如果是一个地址 指向另一个内存 称为引用
确切的说是“传递了一个引用”,但“该引用是通过值传递的方式传过去的”!准备接分,HOHO~
参数的值就是对该对象的引用。
// How todo? How todo? How todo ?}
{
private String c = new String("good");
public String change(test t)
{
t.c = "god!";
return t.c;
}
public static void main(String[] args)
{
test te = new test();
String change = te.change(te);
System.out.println(change);
System.out.println(te.c);
}
}//结果显示的都是“god”
> 当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,
> 并可返回变化后的结果,那么这里到底是值传递还是引用传递
> 答:是值传递。Java 编程语言只有值传递参数。当一个对象实例作为一个
> 参数被传递到方法中时,参数的值就是对该对象的引用。对象的内容可以
> 在被调用的方法中改变,但对象的引用是永远不会改变的
> 那什么情况是引用传递??定义一个变量 MyObject obj = new MyObject(); 然后把 obj 作为参数传递给一个方法。如果在这个方法中,指定改变 obj 指向的这个对象的内容,那就是“值传递”,传过去的值就是指向这个对象的指针。如果在这个方法通过操作,使得返回后的 obj 指向另外一个对象,那就是“引用传递”,传过去的是对这个指针变量的“引用”。显然,Java 只能做到前者,所以,它是“值传递”的。