如何创建引用数组

时间:2017-03-30 23:26:30

标签: java arrays reference

Create an array of references

我已阅读上é¢çš„链接并知é“如何在Java中创建引用数组。但它似乎ä¸èµ·ä½œç”¨......

这是我的测试:

Character []c1 = {'a', 'x'};
Character []c2 = new Character[1];
c2[0] = c1[0]; // I try to make c2[0] as the reference of c1[0]
c1[0] = 'b';

System.out.println(c1[0]);    // b
System.out.println(c2[0]);    // a

有没有办法让c2[0]作为c1[0]的引用,以便c1[0]中的任何更改都会更新c2[0]中的值。

5 个答案:

答案 0 :(得分:2)

ä½ ä¸å¯èƒ½åœ¨Java中真正åšåˆ°è¿™ä¸€ç‚¹ï¼Œå› ä¸ºJava使用pass by value而ä¸æ˜¯é€šè¿‡å¼•ç”¨ä¼ é€’。请考虑以下情形:

Character []c1 = {'a', 'x'};
Character []c2 = new Character[1];

执行这些行åŽï¼Œc1数组中的第一个元素指å‘值a,c2数组中的第一个元素指å‘值\0。现在,

c2[0] = c1[0];
c1[0] = 'b';

执行第一行åŽï¼Œc2[0]指å‘与c1[0]相åŒçš„值(a)。但是,在第二行执行åŽï¼Œc1[0]指å‘值b。

è¿™ä¸ä¼šæ›´æ”¹c2[0]的值,因为c2[0]æŒ‡å‘ c1[0]引用的值,而ä¸æ˜¯å®žé™…çš„c1[0] < em>å‚考。因此,当c2[0]语å¥æ‰§è¡Œæ—¶ï¼Œaä»ç„¶æŒ‡å‘a并打å°print。

答案 1 :(得分:1)

检查以下两个例å­ä»¥èŽ·å¾—ç†è§£ã€‚

//1st example
Emp emp1 = new Emp("Emp1");
Emp emp2 = new Emp("Emp2");

Emp []c1 = {emp1, emp2};
Emp []c2 = new Emp[1];
c2[0] = c1[0];
c1[0].setName("test");

System.out.println(c1[0].getName()); // Prints test
System.out.println(c2[0].getName()); // Prints test

//2nd example
Character []c1 = {'a', 'x'};
Character []c2 = new Character[2];
c2 = c1; // I try to make c2[0] as the reference of c1[0]
c1[0] = 'b';

System.out.println(c1[0]);    // b
System.out.println(c2[0]);    // b

答案 2 :(得分:0)

Java中的“引用â€æ˜¯æ‰€æœ‰å…¶ä»–语言称之为“指针â€çš„内容。指针åªæŒ‡å‘物体; Java还具有数字和boolean类型的原始值。当您将'a'å’Œ'x'分é…ç»™c1时,会导致“自动装箱â€åˆ†åˆ«å°†Character.valueOf('a')å’ŒCharacter.valueOf('x')的指针æ’入到两个æ’槽中c1。

然åŽc2[0] = c1[0];å°†Character.valueOf('a')的指针放入c2。

请注æ„,c2与c1没有任何关系。对一个数组的更改对å¦ä¸€ä¸ªæ•°ç»„没有影å“。现在c1[0]å’Œc2[0]都指å‘包å«Characterçš„{​​{1}}。

然åŽ'a'å°†c1[0] = 'b';加载到Character.valueOf('b')。现在c1[0]å’Œc1[0]包å«ä¸åŒçš„指针。将指针更改为一个指针对å¦ä¸€ä¸ªæŒ‡é’ˆæ²¡æœ‰å½±å“。

如果您已将数组å˜é‡å®šä¹‰ä¸ºæŒ‡å‘与c2[0]相åŒçš„数组,那么您将影å““两个â€æ•°ç»„,因为它们实际上åªæ˜¯ä¸€ä¸ªæ•°ç»„。

c1

然åŽCharacter[] cX = c1; c1[0] = 'b' å’ŒcX[0],实际上æ¯ä¸ªç´¢å¼•éƒ½ä¼šæŒ‡å‘相åŒçš„值,因为它们是相åŒçš„数组。

答案 3 :(得分:0)

有什么æ„义?执行c2[0] = c1[0]时,数组将包å«é›¶ç´¢å¼•å¤„对åŒä¸€å¯¹è±¡çš„引用,但这些数组是独立的。在Java中没有åˆæ³•çš„方法(也许sun.misc.Unsafeå¯ä»¥åšåˆ°è¿™ä¸€ç‚¹ï¼‰æ¥å¯¹æ•°ç»„çš„æŸäº›éƒ¨åˆ†è¿›è¡ŒæŸç§ä¾èµ–引用。

答案 4 :(得分:-1)

Java将所有原始数æ®ç±»åž‹ä½œä¸ºå€¼ä¼ é€’,而ä¸æ˜¯é€šè¿‡å¼•ç”¨ä¼ é€’。但是,对象通过引用传递。所以你å¯ä»¥ä¸ºè¿™ä¸ªä¾‹å­åšçš„是为Character创建一个包装器对象,然åŽåˆ›å»ºä¸€ä¸ªæ•°ç»„。