Nggarap Integer
Minangka kelas wrapper, Integer nyedhiyakake macem-macem cara kanggo nggarap int , uga sawetara cara kanggo ngowahi int dadi String lan String menyang int . Kelas kasebut nduweni rong konstruktor:-
public Integer(int i) , ngendi i minangka nilai primitif kanggo initialise. Iki nggawe obyek Integer sing diinisialisasi karo nilai int .
-
public Integer(String s) mbuwang NumberFormatException . Punika minangka perwakilan senar saka nilai int . Konstruktor iki nggawe obyek Integer sing diwiwiti kanthi nilai int sing diwenehake dening perwakilan string .
Nggawe obyek integer
Ana macem-macem opsi nggawe obyek Integer . Salah siji sing paling umum digunakake yaiku sing paling gampang. Punika conto:Integer myInteger = 5;
Initialization saka variabel Integer ing kasus iki padha karo initialization saka variabel int primitif . Kanthi cara sampeyan bisa miwiti variabel Integer kanthi nilai int . Punika conto:
int myInt = 5;
Integer myInteger = myInt;
System.out.println(myInteger);
Output ing kene yaiku:
Integer myInteger = new Integer(5);
Sampeyan bisa nindakake karo variabel Integer padha karo int (nambah, nyuda, multiply, dibagi, increment, decrement). Nanging, iku penting kanggo elinga yen Integer minangka jinis data referensi, lan variabel saka jinis iki bisa null. Ing kasus iki, luwih becik nolak operasi kasebut.
Integer myInteger1 = null;
Integer myInteger2 = myInteger1 + 5;
Ing kene kita bakal entuk pangecualian:
Konstanta kelas integer
Kelas Integer nyedhiyakake macem-macem konstanta lan cara kanggo nggarap integer. Punika:-
SIZE tegese jumlah bit ing sistem nomer rong digit dikuwasani dening jinis int
-
BYTES minangka jumlah bita ing sistem nomer rong digit sing dikuwasani dening jinis int
-
MAX_VALUE minangka nilai maksimum sing bisa ditahan dening jinis int
-
MIN_VALUE minangka nilai minimal sing bisa ditahan jinis int
-
TYPE ngasilake obyek saka jinis Kelas saka jinis int
Kelas integer cara paling migunani
Saiki ayo ndelok cara sing paling akeh digunakake ing kelas Integer . Sing paling populer, aku ngira, yaiku cara kanggo ngowahi nomer saka String , utawa kosok balene.-
static int parseInt(String s) cara iki ngowahi String kanggo int . Yen konversi ora bisa, NumberFormatException bakal dibuwang.
-
static int parseInt(String s, int radix) cara iki uga ngowahi parameter s menyang int . Parameter radix nuduhake sistem nomer s asli ditulis.
-
Statis Integer valueOf(int i) ngasilake Integer kang nilai i ;
-
statis Integer valueOf(String s) dianggo kaya parseInt(String s) , nanging asil bakal Integer , ora int ;
-
statis Integer valueOf(String s, int radix) dianggo padha karo parseInt(String s, int radix) , nanging asil integer , ora int .
Apa ana masalah karo kelas Integer? Yo wis, ana…
Dadi ana rong jinis integer (sing cocog karo 32 bit) ing Jawa: int lan Integer . Kanggo ngerti spesifik saben wong, kita kudu ngerti ing ngisor iki babagan model memori JVM: kabeh sing sampeyan wara-wara disimpen ing Stack Memory (JVM Stack tartamtu kanggo saben Thread), utawa Heap Space. Jinis primitif ( int , long , float , boolean , double , char , byte , etc) disimpen ing memori Stack. Kabeh Obyek lan susunan disimpen ing Heap Space. Referensi kanggo obyek lan array sing dibutuhake kanggo metode kasebut disimpen ing Stack. Dadi. Napa kita peduli? Inggih, sampeyan ndeleng, Stack luwih cilik tinimbang Heap (con), nanging luwih cepet alokasi nilai ing Stack, tinimbang Heap (pro). Ayo dadi miwiti karo jinis primitif int . Butuh nganti persis 32 bit. Iku 32/8 = 4 bita. Amarga iku jinis primitif. Saiki, ayo nimbang Integer . Iku obyek, karo overhead ekstra lan alignments. Aku wis nggunakake perpustakaan jol kanggo ngukur ukuran:public static void main(String[] args) {
System.out.println(ClassLayout.parseInstance(Integer.valueOf(1)).toPrintable());
}
lan ternyata njupuk 16 bita:
public static void main(String[] args) {
int[] array = new int[1000];
for (int i = 0; i < 1000; i++) array[i] = i; System.out.println(ClassLayout.parseInstance(array).toPrintable());
}
Lan asile 4016 byte:
public static void main(String[] args) {
List<Integer> list = new ArrayList<>(1000);
for (int i = 0; i < 1000; i++) list.add(i);
System.out.println(GraphLayout.parseInstance(list).toFootprint());
}
Lan asile 20040 byte (maneh, kaping 4!):
public static void main(String[] args) {
TIntList list = new TIntArrayList(1000);
for (int i = 0; i < 1000; i++) list.add(i);
System.out.println(GraphLayout.parseInstance(list).toFootprint());
}
Lan asile 4040 byte (meh padha karo mung int [] !):
benchmark {
configurations {
main {
warmups = 5 // number of warmup iterations
iterations = 50 // number of iterations
iterationTime = 500 // time in seconds per iteration
iterationTimeUnit = "ns" // time unit for iterationTime
benchmarks:
private static final Random random = new Random();
@Benchmark
public int testPrimitiveIntegersSum() {
int a = random.nextInt();
int b = random.nextInt();
return a + b;
}
@Benchmark
public Integer testBoxedIntegersSum() {
Integer a = random.nextInt();
Integer b = random.nextInt();
return a + b;
}
asil:
@Benchmark
public int testPrimitiveArray() {
int[] array = new int[1000];
for (int i = 0; i < 1000; i++) array[i] = i;
int sum = 0;
for (int x : array) sum += x;
return sum;
}
11933.545 ops/s [Average]
@Benchmark
public int testBoxesArray() {
Integer[] array = new Integer[1000];
for (int i = 0; i < 1000; i++) array[i] = i;
int sum = 0;
for (int x : array) sum += x;
return sum;
}
2733.312 ops/s [Average]
@Benchmark
public int testList() {
List<Integer> list = new ArrayList<>(1000);
for (int i = 0; i < 1000; i++) list.add(i);
int sum = 0;
for (int x : list) sum += x;
return sum;
}
2086.379 ops/s [Average]
@Benchmark
public int testTroveIntList() {
TIntList list = new TIntArrayList(1000);
for (int i = 0; i < 1000; i++) list.add(i);
int sum = 0;
for (int i = 0; i < 1000; i++) sum += list.get(i);
return sum;
}
5727.979 ops/s [Average]
Asil: array primitif luwih saka 4 kaping luwih cepet saka array saka nilai kothak ( Integer s); meh kaping enem luwih cepet tinimbang ArrayList nilai kothak ( Integer s); lan kaping pindho minangka cepet minangka TIntArrayList (sing bener decorates Uploaded ints primitif). Mulane, yen sampeyan butuh struktur data kanggo nyimpen koleksi nilai integer, lan ukurane ora bakal diganti, gunakake int [] ; yen ukuran bakal diganti - sampeyan bisa uga pengin nggunakake perpustakaan tove4j karo TIntArrayList . Lan ing kene pungkasane karangan ing ngendi aku nerangake kontra nggunakake jinis Integer . Ana sawetara cara statis Integer sing menarik , sing kudu dakkandhakake sadurunge rampung. public static Integer getInteger (String nm, int val) ora nindakake apa sing bisa dipikirake, nanging njupuk nilai Integer saka properti sistem. Val minangka standar yen properti iki ora disetel. public static String toBinaryString(int i) ngasilake String kanthi perwakilan binar saka nomer. Ana cara kanggo njupuk basis-16 ( toHexString ) lan basis-8 ( toOctalString ) representasi. Ana cara kanggo ngurai String dadi int . Sanajan senar kasebut minangka perwakilan adhedhasar radix non-10. Ing ngisor iki sawetara conto: Integer.parseInt ("-FF", 16) ngasilake -255 Integer.parseInt ("+42", 10) ngasilake 42 Integer.parseInt ("1100110", 2) ngasilake 102
GO TO FULL VERSION