Jun 30

Wie ist der Output des folgenden Codes:

public class Angestellter {

static void PrintPersNr(int … PersNr){

for (int i:PersNr)

System.out.println(i);

}

public static void main(String args[]) {

Integer PersNr [] = {1,2,3,4};

PrintPersNr(PersNr);

}

}

Antwort/ answer
Tagged with:
Jun 29

Die nächsten Tage werde ich recht viel über Collection,  Collections und auch ein bisschen über collection schreiben.

Ziemlich verwirrend; es ist leider nicht das Gleiche.

Vorab schonmal ein kleiner Überblick der Unterschiede; näheres folgt die nächsten Tage:

Collection Collections collection
Interface Klasse Datenstruktur
set, list und queue sind von Collection abgeleitet Algorithmen als statische Funktion
Häufige Methoden sind deklariert, z.B. add(), remove(), contains(), size() und iterator() viele Algorithmen sind nur auf List-Objekten definiert
Tagged with:
Jun 27

zur Verdeutlichung hier eine Funktion ohne die Überschreibung beider Methoden:
class Angestellter {

public int PersNr;

public static void main(String[] args) {

Angestellter a = new Angestellter();
Angestellter b = new Angestellter();
Angestellter c = new Angestellter();

a=b;

System.out.println(a.equals(b)); // true
System.out.println(a.equals(c)); // false

System.out.println(a.hashCode()); // gleicher Hash-code wie bei b
System.out.println(b.hashCode()); // gleicher Hash-code wie bei a
System.out.println(c.hashCode()); // Hash-code ist unterschiedlich zu a und b

}


}

Die Ausgabe ist ähnlich dieser:

true
false
1671711
1671711
11394033

Man kann an diesem Beispiel sehr gut sehen, dass equals() und hashCode() zusammenarbeiten.

Als gleich angesehende Werte bekommen auch den gleichen Hash-Code.

Jun 25

um einen anderen HashCode zuzuweisen, muss public int hashCode() überschrieben werden.

class Angestellter {

public int PersNr;

public int hashCode(){

return PersNr*10;

}

public boolean equals(Angestellter c){

if (c.PersNr==this.PersNr)

return true;

else

return false;

}

public static void main(String[] args) {

Angestellter a = new Angestellter();

Angestellter b = new Angestellter();

Angestellter c = new Angestellter();

a.PersNr=1;

b.PersNr=1;

c.PersNr=2;

System.out.println(a.hashCode()); // Ausgabe: 10

System.out.println(b.hashCode()); // Ausgabe: 10

System.out.println(c.hashCode()); // Ausgabe: 20

}

}

Da der Hash-Code an den Vergleichswert Personal-Nummer gekoppelt wurde, ist nun der HashCode dem Vergleich angepasst.

Wäre dies nicht passiert, wären selbst für laut Vergleich gleiche Werte unterschiedliche HashCodes erzeugt worden.

Jun 23

Die Methode hashCode() hat die Aufgabe, zu jedem Objekt eine möglichst eindeutigen int-Wert (=HashCode)  zu liefern, der das Objekt identifiziert.

Daher hängen die Methoden equals() und hashCode() eng zusammen; wenn sich der Vergleich ändert, sollte sich der HashCode ebenfalls ändern, um zu gewährleisten, das bei gleichen Objekten auch der gleiche Hash-Code zurückgeliefert wird.

Verwendet werden HashCode`s überall dort, wo direkt oder indirekt mit Hashtables oder HashSets gearbeitet wird. Nähere Infos zu Hashtables und HashSets werde ich zu einem späteren Zeitpunkt veröffentlichen. Vorteil ist in jedem Fall ein effizienterer Zugriff auf die Elemente.

Jun 22

Welche Zuweisungen sind korrekt:

  1. int a = 10;
  2. byte b = 234;
  3. char c = “a”;
  4. boolean d=null;
  5. float e = 1.2;
Antwort/ answer
Tagged with:
Jun 21

Um die Sache mal wieder etwas komplizierter zu machen, kann man auch verschiedene Objekte miteinander vergleichen:

class Angestellter {

public int PersNr;

public boolean equals(Angestellter c){

if (c.PersNr==this.PersNr){

return true;

}

else

return false;

}

public static void main(String[] args) {

Angestellter a = new Angestellter();

Buchhalter b = new Buchhalter();

a.PersNr=1;

b.PersNr=1;

System.out.println(a.equals(b));

}

}

class Buchhalter extends Angestellter {

}

Die Ausgabe ist hier natürlich auch true.

Es empfielt sich, abzufragen, ob beide Objekte den gleichen Ursprung haben, da es ansonsten im Verlaufe des  weiteren Code zu Verwirrungen kommen kann.

Die Abänderung sähe dann so aus: if (c.PersNr==this.PersNr && c instanceof Angestellter)

Jun 20

Warum compiliert dieser Code nicht:

interface setPersNr {

void setPersNr();

}

public class Angestellter implements setPersNr{

int PersNr;

void setPersNr(){

PersNr=1;

}

public static void main(String args[]) {

new Angestellter().setPersNr();

}

}

Antwort/ answer
Tagged with:
Jun 19

Wie alle Methoden kann auch die equals-Methode überschrieben werden. Nun wieder die Frage aller Fragen: Für was soll das gut sein?

Die Antwort ist relativ einfach; manchmal möchte man die Gleichheit eines Objektes nicht an einem kompletten Objekt ausmachen, sondern nur an bestimmten Eigenschaften:

class Angestellter {

public int PersNr;

public static void main(String[] args) {




Angestellter a = new Angestellter();

Angestellter b = new Angestellter();




System.out.println(a.equals(b));

a.PersNr=1;

b.PersNr=1;




System.out.println(a.equals(b));

}

}

Hier ist der Output jeweils false; da die Objekte ja nicht komplett identisch sind. Wollen wir aber einen Vergleich anhand der Personalnummer müssen wir die equals-Methode überschreiben:
class Angestellter {

public int PersNr;




public boolean equals(Angestellter c)

{

if (c.PersNr==this.PersNr){

return true;

}

else  {

return false;

}




public static void main(String[] args) {

Angestellter a = new Angestellter();

Angestellter b = new Angestellter();




System.out.println(a.equals(b));

a.PersNr=1;

b.PersNr=1;




System.out.println(a.equals(b));

}

}

Hier ist der Output jeweils true; die Objekte werden ja nur anhand der Personalnummer verglichen, welche Standardmäßig mit 0 vorbelegt wurde und später jeweils den Wert 1 zugewiesen bekam.

Jun 17

Heute geht es um den Unterschied von == und equals.

== gibt immer das Ergebniss des Zeigervergleiches zurück; also ob beide Variablen auf das gleiche Objekt zeigen;

equals gibt immer das Ergebnis des Wertevergleiches zurück; also ob diese beide Variablen inhaltlich gleich sind.

Hier ein Beispiel:

class Angestellter {

public static void main(String[] args) {

String d = new String(“Hello”);

String e = new String(“Hello”);

System.out.println(e == d); //false (Zeigervergleich)

System.out.println(e.equals(d)); //true (Wertevergleich)

String a, b;

a = “Hello”;

b = a;

System.out.println(a == b); //true (Zeigervergleich)

System.out.println(a.equals(b)); //true (Wertevergleich)

String c = “Hello”;

System.out.println(a == c); //true (Zeigervergleich)Achtung: Da hier nicht “New String” angelegt wurde, zeigt dieser String automatisch auf den existierenden!!!

System.out.println(a.equals(c)); //true (Wertevergleich)

}

}

Tagged with:
preload preload preload
http://www.wikio.de Blog Top Liste - by TopBlogs.de Blogverzeichnis - Blog Verzeichnis bloggerei.de Bloggeramt.de Software
Webbhotell Top Blogs