首先,请看一段代码,然后思考输出结果
嗯哼!很简单吧
那么,再来看这一段代码
结果是什么嘞?
为什么 b[0] 也做了+10的操作呢?
其实,在Java里有这么一项说明
除了基本数据类型以外的赋值都是引用的赋值
下面举个例子:
int a;
int b=10;
a=b;
对基本数据类型 int
a=b 操作:把 b 里的内容拷贝给 a
但如果a b 是对象的话
a=b 则意味着把 a 指向 b 所指向的东西,a 和 b 指向同一个东西,没有 “ 拷贝 ”
对其中一个修改,即是对他们两个进行修改
可能有朋友对于第二个例子会这么想,
你的b数组本来就没有空间当然是把 b 指向 a 啦!
且再看
即便 b 数组和 a 数组有同样大的空间,仍然没有所谓的“ 拷贝 ”操作
b=a 还是做了把 b 指向 a 的操作
顺带一提,对于对象也是如此哦!
因为对象也不是基本数据类型
顺带一提,这还容易存在一个误区
public static void main(String[] args) {
String II="fu";
f(II);
}
public static void f(String s) {
s=s+"you";
}
执行结果:
fu
分析:
确实,传过去的参数是引用
使得 s 和 II 都指向了同一个——“fu”
但是,这并不意味着你改变s的指向,同时会改变II的指向
s+"you"
会产生一个新的String对象 “fuyou” ,然后s指向它
但是,II和这一丁点关系都没有,仍然指向 ——“fu”