2016-03-30 15 views
0

int[]型の保持変数をintにすると、プリミティブのために保持している変数intを変更すると、配列は更新されませんデータ型はポイントされるのではなくコピーされます。しかし、これを実現させる方法はありますか?おそらく配列内のオブジェクトのように `int`を扱う方法

Integer int[] = new Integer[] {Integer f1...}; 

私はint[]を作ることができるようにしたいが、私はプログラムの中で、それは別の場所で保持している変数を変更したとき、彼らは同様にint[]内で変更されています。

+1

'整数[]'存在しないが、 'Integer'(つまり、あなたが与えられた' Integer'オブジェクトが保持する値を変更することはできません)不変であるので、それがint [] 'と'と非常によく似て振る舞います変異性に関して。 –

答えて

5

int[]とは絶対にありません。独自の変更可能な整数クラスを作成して、それを行うには、AtomicIntegerを乱用してください。

AtomicInteger[] array = new AtomicInteger[5]; 
array[0] = new AtomicInteger(6); 
array[0].set(4); 
System.out.println(array[0].get()); // returns 4 
+0

さらに、[commons-lang](https://commons.apache.org/proper/commons-lang/)には 'MutableInt'があります – Andrew

+0

これは' String [] 'でも同様ですか? – David

+0

@David、 'String'は不変なので、それは良くないでしょう。あなたは 'StringBuilder'などを使うことができます。 (しかし、一般的に、突然変異を起こしたいのはまず悪い兆候です。) –

1

すべてのタイプに適用できる簡単なアプローチは、1要素配列を保持する配列を使用することです。

int[][] pos = new int[3][1]; 
int[] x = new int[] { 3 }; 
int[] y = new int[] { 4 }; 
int[] z = new int[] { 0 }; 

pos[0] = x; 
pos[1] = y; 
pos[2] = z; 

x[0] = 42; // Translate in x direction 

System.out.println("x=" + pos[0][0]); // Prints "42" 

ただし、アクセサーとミューテータに意味のある名前を付けるクラスを定義する方がよい場合があります。

public class Position { 
    private x, y, z; 
    public int x() { return x; } 
    public setX(int x0) { x = x0; } 
    ... etc 
} 
+0

私は新しいJavaです学生、2dアレイは私を怖がらせるhaha – David

+0

@David - 彼らは怖い必要はありません。あなたの質問は、指し示しています。 Javaでは、データの行へのポインタの配列として2D配列を視覚化することができます。長方形の2D配列を作成することができます。しかし、ポインターがヌルであったり、異なる長さの行を持つ2D配列を作成することもできます。それはそれの最悪です。 –