怎样区分引用传递和值传递?它们各有什么特点?它们分别存放在什么地方?
解决方案 »
- java 运算符左移<<与右移>>是否可逆
- JAVA中swing插件装不上。。
- 一个字符,我希望重复100次,也就是比如a,变成100个a
- 各位老师,我想在struts中的forward中转回right.jsp带参数的转,怎么转?
- 请问有没有办法把一个Label上的文字横过来显示
- 华为面试题,有谁会做?
- 关于实现像用户修改完word文档没保存就点关闭按钮,word提示“是否保存”,如何实现?
- 求助: TrueTypeFont.class,着急用~先谢了!,
- 现在公司要求学JAVA,请老手们提建议,主要是买书的问题!
- 学习JAVA从何入手?
- Java ThreadGroup
- java timezone设置的问题
看sun的java教程怎么说。
引用传递会改变对象内部的值,也就是说如果你在被调用的函数内改变了这个引用所指向的对象的某个属性的值,在这个函数外面使用该对象得到的是改变之后的值。
而值传递,由于基本类型作用域的关系,如果你在被调用的函数内改变了它的值,改变的值只在被调用的函数内有效,在函数外得到的仍然是改变之前的值。class A
{
public int i = 1;
}
public class B
{
int plus(int i)
{
return ++i;
}
public static void main(String[] args(
{
int i = 1;
A a = new A();
B b = new B();
System.out.println(b.plus(i));
System.out.println(b.plus(A.i));
}
}
得到的结果是:
1
2
这句错了
System.out.println(b.plus(a.i));
package javaapplication2;public class NewClass4 {
public NewClass4(String s){
s="cdf";
}
public static void main(String args[]){
String s="agc";
new NewClass4(s);
System.out.println(s);
}
}
这时输出的是agc,为什么?
public NewClass4(String s){
s="cdf";
}
这里的String s 是一个局部变量,只是在这一个方法中有效,如果在这里就输出的话,那这时的s就等于cdf
public static void main(String args[]){
String s="agc";
new NewClass4(s);
System.out.println(s);
}
这里的s等于agc是定义好了在这个方法中的用的,虽然调用了NewClass4(s)方法,s在这个方法中改变了值但这只是在这个方法中,出了这个方法那这个值就没的什么做用了,这就是值传递,只传递值,不管这个值在别的方法的调用时有什么改变都不影响它的本身,