重新出发000004-阅读文章"Java中的数组"。
2018-06-04 10:10:58
imadiaos
package review.base.Java那些事儿;
public class 四_Java中的数组 {
public static void main(String[] args){
TestArrays ta = new TestArrays();
ta.testObjectArrays();
ta.thinking();
}
}
class TestArrays{
public void testObjectArrays(){
// 第一种写法,直接{}
char[] charArr1 = {'a','b','c'};
// 第二种写法,实例化数组并直接赋值
char[] charArr2 = new char[]{'J','a','v','a'};
// 第三种,先实例化,以后再赋值。
char[] charArr3 = new char[3];
charArr3[0] = '1';
charArr3[1] = '2';
charArr3[2] = '3';
/**
* 参考文章地址:https://zhuanlan.zhihu.com/p/27584309
*
* 经过反编译代码,确实和文章中提到的情况一样,得到的源码不一样。
*
* char[] arrayOfChar1 = { 'a', 'b', 'c' };
*
* char[] arrayOfChar2 = { 'J', 'a', 'v', 'a' };
*
* char[] arrayOfChar3 = new char[3];
* arrayOfChar3[0] = '1';
* arrayOfChar3[1] = '2';
* arrayOfChar3[2] = '3'; */
System.out.println(charArr1);
System.out.println(charArr2);
System.out.println(charArr3);
}
/**
* 思考,为什么改了charArr,而输出charArr2也会改变呢。
*/
public void thinking(){
char[] charArr = {'a','b','c'}; // charArr的引用指向了数组对象(假设为@100)
char[] charArr2 = charArr; // charArr和charArr2 同时指向了 @100
charArr[1] = 'x'; // 改变数组对象的值,不会引发指向的改变。只是改变了@100。 所以此时同样指向@100的charArr2看起来也变了
System.out.println(charArr2);
// 另一种情况
char[] x = {'1','2','3'};
char[] a = {'a','b','c'};
char[] b = a;
a = x;
System.out.println(b);
// 有点牵强,但是可以认为a的引用变了不会影响到b的引用。
}
}