Worin besteht bei diesen Methoden der Unterschied:
System#arraycopy
Object#clone
java.util.Arrays#copyOf
java.util.Arrays#copyOfRange
System#arraycopy
Object#clone
java.util.Arrays#copyOf
java.util.Arrays#copyOfRange
3 Methoden für das gleiche?
Eigentlich weiß ich jetzt nich mehr als vorher.
Natürlich erstellt es eine flache Kopie. Oder erwartest du ein [c]return this;[/c]?Für mich sind gar keine Unterscheide ersichtlich, außer dass die eine Methode weniger Elemente kopieren kann bzw. mehr kopieren kann (und dann mit null auffüllt) und dass clone# wahrscheinlich nur die Arrayreferenz kopiert, so gesehen also nicht einmal eine flach Kopie erstellt?
Probieren geht über studieren Bastel doch einfach ein Bisschen mit Arrays rum, bevor du sie gleich wieder aus deinem Kopf katapultieren kannst und Listen (und andere Collections) verwendest"Nich gleich hinsichtlich der Typsicherheit"... Müsste man jetzt noch en bisschen erklären, was denn da wo nicht gleich ist...
"Nich gleich hinsichtlich der Typsicherheit"... Müsste man jetzt noch en bisschen erklären, was denn da wo nicht gleich ist...
Eine einfache und verständliche Definiton für "Typsicherheit" in Java ist folgende:
"[...] bedeutet Typsicherheit (engl. type-safety) folgende Garantie: wenn sich ein Programm fehler- und warnungsfrei übersetzen lässt, dann ist es ausgeschlossen, dass zur Laufzeit eine unerwartete ClassCastException ausgelöst wird. Eine 'unerwartete' ClassCastException wäre eine, die ohne einen entsprechenden Cast im Sourceode entsteht."
public class ClassCastException
extends RuntimeException
Thrown to indicate that the code has attempted to cast an object to a subclass of which it is not an instance. For example, the following code generates a ClassCastException:
Java:Object x = new Integer(0); System.out.println((String)x);
Since:
JDK1.0
Wenn ich noch mehr für dich Google'n soll sag es einfach...:rtfm:
Nimm die Methode die am besten zu deinem "Anwendungsfall" passt.Und das ist vor allem im Anwendungsfall nervig, weil man dann ja nicht weiß, welche Methode nehmen usw.
Nimm die Methode die am besten zu deinem "Anwendungsfall" passt.
Geht mit jeder der drei Methoden.Es soll eine flache Kopie des Arrays erstellt werden, mit gleicher Länge. Welche nehm' ich dann? Welche wäre schnellste?
(Typsicherheit ist mir unwichtig)
Number[] numArr = new Number[] { 23, 42 };
Integer[] intArr = new Integer[numArr.length];
System.arraycopy(numArr, 0, intArr, 0, numArr.length);
System.out.println(Arrays.toString(intArr));
numArr[1] = 42.0;
System.arraycopy(numArr, 0, intArr, 0, numArr.length);
System.out.println(Arrays.toString(intArr));
Das hier ist am einfachsten lesbar (bezogen auf mein obiges Beispiel):Es soll eine flache Kopie des Arrays erstellt werden, mit gleicher Länge. Welche nehm' ich dann? Welche wäre schnellste? (Typsicherheit ist mir unwichtig)
Integer[] destArray = Arrays.copyOf(intArr, intArr.length);
Number[] numArr = new Integer[2]; // Nanu, was ist das denn?
numArr[0] = 23; // OK. Typ ist int.
numArr[1] = 42.0; // BOOM! Double darf nicht in Integer-Array gespeichert werden-