2017-02-07 13 views
2

У меня есть следующий фрагмент кода:побитовое исключающее оператора и массивы байтов

byte[] S = new byte[256]; 
byte[] T = new byte[256]; 

for (int i = 0; i < 256; ++i) { 
    S[i] = (byte)i; 
    T[i] = 13; 
} 

int j = 0; 
int i2 = 0; 
while (i2 < 256) { 
    j = j + S[i2] + T[i2] & 255; 
    byte[] arrby = S; 
    int n2 = i2; 
    arrby[n2] = (byte)(arrby[n2]^S[j]); 
    byte[] arrby2 = S; 
    int n3 = j; 
    arrby2[n3] = (byte)(arrby2[n3]^S[i2]); 
    byte[] arrby3 = S; 
    int n4 = i2++; 
    arrby3[n4] = (byte)(arrby3[n4]^S[j]); 
} 

Индекс S [] массив с начальными значениями: 0,1,2,3,4,5 ...

Когда программа достигнет линии:

arrby[n2] = (byte)(arrby[n2]^S[j]); 

S [0] меняет свое значение от «0» до «13», и я не могу понять, почему. Что изменит значение S [0]? Как я вижу это «^» просто делает сравнение и изменение значения arrby [n2], но не S [0]

+4

'байт [] arrby = S;' '- S' и' arrby' относятся к тому же массиве. – Eran

+1

Помимо этого: ваши имена выглядят ужасно. Они ничего не говорят о переменных переменных. Также довольно ужасно «указать» длину ваших массивов (255) повсюду. Лучше использовать theArray.length или, по крайней мере, SOME_CONSTANT = 255. – GhostCat

+0

'byte [] arrby = S' - Это ** не ** создает копию' S' и сохраняет ее в 'arrby'. Он копирует ссылку, что означает, что обе переменные будут ссылаться на один и тот же объект. Если вы измените 'arrby', вы также измените' S' и наоборот. – BackSlash

ответ

6

Здесь:

byte[] arrby = S; 

Вы делаете arrbyточку в же массив, как S.

Тогда:

arrby[n2] = (byte)(arrby[n2]^S[j]); 

Вы изменяете запись, которая меня n этот массив.

Тада ...

Итак, решение: если вы не хотите, чтобы изменить содержимое вашего массива, убедитесь, что вы не создаете другие ссылки, указывающие на этот массив. В зависимости от ваших требований вы можете, например, скопировать данные из S в только что созданный массив arrby.

0

Строка кода ниже делает arrby референс той же выделенной памяти как S

byte[] arrby = S; 

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

  • Нет связанных вопросов^_^