我已阅读上é¢çš„链接并知é“如何在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]
ä¸çš„值。
ç”案 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创建一个包装器对象,然åŽåˆ›å»ºä¸€ä¸ªæ•°ç»„。