在java中经常会听到函数返回什么这么一说。
比如 public int add(int a, int b){ return a+b;}
这个就是返回a和b的和(值)
在看一个public MyObject add(int a, int b){ return new MyObject ();}
这个我们常说是返回对象。
那么问题来了,这个(return)返回究竟是返回对象,还是引用,还是值呢?
1、对于基本数据类型
return 返回的是值
而且基本数据类型没有引用这么一说,如int a = 10; 这个a就是数据本身(不是10这个对象的引用)
所以如果有方法传递的值是基本类型,在方法内部是不会被修改的
int a=10; 然后调用方法public void test(int a){a--;}
这样之后a还是等于10.
2、其他
return 返回的是当前对象的引用地址的值
地址引用引用的是对象在内存中的地址,因此多个变量可以引用同一个地址,所以通过一个变量改变数值会影响到所有饮用该地址的变量。
注意这里说的是值,因为java中只有值传递,没有引用传递,所以这里返回的是这个引用地址的值
其实我觉得return也是一个java中的传递过程
这里有更详细的解释http://blog.csdn.net/jiangnan2014/article/details/22944075
举一个传递的例子 因为return不好表述 他们差不多
public class Test {
/**
* 基本类型 不存在引用 就是传递值
* @param a
*/
public static void change(int a) {
a++;
}
public static void main(String[] args) {
// int a = 0;
// change(a);
// System.out.println(a);
Number num = new Number(10);
System.out.println(num);
//这里传递进去的是num引用过的地址的值
changeObj(num);
System.out.println(num);
}
/**
* 对象也是传递值
* @param o //通过传递过来的引用的地址值 得到了那个引用
*/
public static void changeObj(Number o) {
o.add();
//所以这里改的就是外面传递进来的对象
//并没有新建对象
}
}
class Number {
private int n = 0;
public Number(int n) {
this.n = n;
}
public void add() {
n++;
}
public String toString() {
return "Num:" + n;
}
}
注:变量中存的是引用的地址,引用中存的是对象的地址