2014-11-26 1 views
0

Так что мой текущий код:Я пытаюсь сделать два индекса массива относятся к одной и той же точки в памяти

int x = 5; 

int[] one = new int[1]; 
one[0] = x;  
int[] two = new int[1]; 
two[0] = x; 

x = 10; 

System.out.println(one[0]); 
System.out.println(two[0]); 

Цель здесь, чтобы получить выход двух 10-х годов. Вместо этого я получаю два печатных издания.

Я знаю, что в C++ существует способ сказать & x ссылаться на ссылочный тип, но я не знаю ничего подобного в Java?

Я был бы очень благодарен, если бы кто-то мог помочь мне здесь.

EDIT

Cheers guys. В итоге я создал свой собственный класс и использовал его.

class Ideone { 

    public static void main (String[] args) throws java.lang.Exception 
    { 
     MyTester x = new MyTester(); 
     x.i = 5; 
     MyTester[] one = new MyTester[1]; 
     one[0] = x; 
     MyTester[] two = new MyTester[1]; 
     two[0] = x; 

     x.i = 10; 

     System.out.println(one[0].i); 
     System.out.println(two[0].i); 
    } 
} 

class MyTester 
{ 
    public MyTester() {} 
    public int i; 
} 
+0

Примитивные значения копируются. Попробуйте использовать массив Integer. – Scot

+2

@Scot Целые числа неизменяемы, поэтому присвоение нового * значения * 'Integer' не будет видно в массиве. Что нужно OP - это изменение * state * 'x'. – Pshemo

+1

@Callum вы можете создать свою собственную реализацию класса Integer с помощью setter ie. mutable, то вы могли бы выполнить это ... – brso05

ответ

0

Нет, нет. Самое близкое, что вы могли бы сделать, это сказать one = two, а затем one[0] = 10, а затем two будет указывать на тот же массив, что и one, и будет отражать изменение.

Вы ничего не можете сделать с помощью только голого примитива.

+0

Можно ли сделать это с одним из моих собственных классов? Идея в конце (это был всего лишь пример) заключалась в том, чтобы иметь один объект, который можно использовать в нескольких массивах, чтобы они обновляли поля. – Callum

+0

, если вы поместите объекты типа MyObject в массив, а затем выполните myObject.myint = x; то да, это сработает. – MeBigFatGuy

+0

Объекты передаются как ссылки; ссылки на один и тот же объект, будь то в массиве или локальной переменной, будут отражать изменения, сделанные с помощью других ссылок. 'myReference = a' не изменит других мест, но' myReference.foo = bar' изменит другие ссылки на один и тот же объект. –

0

Он не работает так, как вы ожидали, так как он называется значением. Существует хорошая старая статья со многими хорошими примерами для чтения: Is Java "pass-by-reference" or "pass-by-value"?

Смежные вопросы