I次のコードを持っている:ビット単位のXOR演算とバイト配列
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]「13」に「0」からその値を変更し、私はその理由を理解することはできません:プログラムがラインに到達
。 S [0]値を変更するものは何ですか?私は「^」だけではなく、Sの比較を行うと、arrby [N2]の値を変更して、それを見たよう[0]ここで
'バイト[] = Sをarrby同じ割り当てられたメモリrefference
arrby
になり、' - 'S'と' arrby'同一の配列を指します。 – Eranそれを超えて:あなたの名前はちょっとひどいです。彼らは変数について何も言わない。また、あなたの配列の長さ(255)を "スペルアウト"するのはかなり恐ろしいことです。より良いtheArray.length、または少なくともSOME_CONSTANT = 255を代わりに使用してください。 – GhostCat
'byte [] arrby = S' - これは' S'のコピーを作成せず、 'arrby'に保存します**。参照をコピーします。つまり、両方の変数が同じオブジェクトを参照します。 'arrby'を変更すると、' S'も変更されます。 – BackSlash