inicjalizacja tablicy w javie

0

Czy poniższa tablica została dobrze zainicjalizowana ??

 
package chapter55;

public class Main {
    public static void main(String[] args) 
    {
        String[] tab = new String[10];
        for( int i = 0; i < tab.length; ++i)
        {
            tab[i] = new String();
            tab[i] = "macon";
        }
        
         for( int i = 0; i < tab.length; ++i)
        {
            System.out.println(tab[i] + i);
        }
        
    }
}
0

Po pierwsze

            tab[i] = new String();
            tab[i] = "macon";

daje dokładnie to samo co:

            tab[i] = "macon";

A w ogóle pętlę

        for( int i = 0; i < tab.length; ++i)
        {
            tab[i] = new String();
            tab[i] = "macon";
        }

Możesz zamienić na:

Arrays.fill(tab, "macon");

Gdzie Arrays to java.util.Arrays.

0

Podobno tworzona jest tablica referencji.
Więc jeśli byśmy mieli przykładowo własną klasę.

package chapter55;

class Macon {
String nazwa = new String();
Macon(String nazwa)
{
this.nazwa = nazwa;
System.out.println("NAzwa w konstruktorze " + nazwa);
}

}

public class Main {
public static void main(String[] args)
{
String[] tab = new String[10];
for( int i = 0; i < tab.length; ++i)
{
tab[i] = new String();
tab[i] = "macon";
}

 Macon[] maconiowa = new Macon[10];
 for( int i = 0; i < maconiowa.length; ++i)
 {
     maconiowa[i] = "Kiki";   <--------błąd
 }
    
    

// for( int i = 0; i < tab.length; ++i)
// {
// System.out.println(tab[i] + i);
// }

}

}


Wedle Twojej wypowiedzi wynika że mógłbym zrobić podstawienie 
maconiowa[i] = "Kiki"; a wyrzuca błąd.
Czyżby klasa String miała jakąś super metode??
0

Kilka faktów:

  • "Kiki" to jest String, a nie Macon.
  • "Kiki" to obiekt, a dokładnie String. Dlatego możez zrobić np "Kiki".length(); czy "Kiki".equals("Diki");
  • String nie dziedziczy po Macon, dlatego nie możesz włożyć Stringa do tablicy Maconów.
  • "Kiki" nie jest równoznaczne z new String("Kiki"); - pierwszy zapis oznacza referencję do Stringa, który siedzi w puli stałych, a drugi zapis tworzy zupełnie nowy obiekt za każdym razem, gdy jest wykonany;
  • Stringi są traktowane specjalnie na etapie kompilacji, dla przykładu jest operator + dla Stringów, np "Ki" + "ki" da w efekcie "Kiki"
0

Tablica maconiowa nie jest typu String tylko Macon.
Możesz ją inicjalizować w pętli: maconiowa[i] = new Macon("Kiki");
albo przez Arrays.fill(maconiowa, new Macon("Kiki"));
Ten drugi sposób utworzy jednak tylko jeden obiekt typu Macon.

0

Możesz ją inicjalizować w pętli: maconiowa[i] = new Macon("Kiki");
albo przez Arrays.fill(maconiowa, new Macon("Kiki"));

Te dwa zapisy nie są równoważne - w pierwszym wypadku dostaniemy wiele Maconów, a w drugim tylko jeden.

0

Dziękie wielkie wszystkim, teraz zajarzyłem. :D

Pozwólcie, że opowiem wam dowcip.
Co zastąpi kobiecie cycek po amputacji?

  • Babciu, czy dziadek jest mechanikiem?
  • Nie wnusiu.
  • Dziwne, bo właśnie leży na ulicy pod autobusem...
0

Co zastąpi kobiecie cycek po amputacji?
Piersiówka.

1 użytkowników online, w tym zalogowanych: 0, gości: 1