Hlavní navigace

Názor k článku Novinky v Javě aneb Tygří spáry od Mat - Priklad: (new String("Ahoj")).equals(new String("Ahoj")) byl jen zpusob jak predvest co...

Článek je starý, nové názory již nelze přidávat.

  • 7. 11. 2003 14:52

    Mat (neregistrovaný)

    Priklad:

    (new String("Ahoj")).equals(new String("Ahoj"))

    byl jen zpusob jak predvest co za nas dela prekladac. konstrukce "" tady nebyla chapana jako objekt String, ale posloupnost znaku. To ze konstrukce "" je chapana jako vytvoreni instance String se stejnym obsahem jako je posloupnost znaku je jen konvenci Javy (v C++ je to pole znaku). Moje chyba ze pisu rychleji nez myslim.

    Sticka metoda Integer.valueOf() vyzaduje String jako parametr, takze prekladac skutecne vyraz

    3.doubleValue();

    prelozi na

    (new Integer(3)).doubleValue();

    s moznymi optimalizacemi, takze vysledek bude asi

    (double) 3;

    Ano je to ekvivalentni zapis, ale jde spise o priklad ruzneho pohledu na typy v Jave. Znate-li nekdo funkcionalni jazyky pak vite, ze primitivni typy tam neexistuji na vse se pohlizi prozmenu jako na funkce: Cislo 3 je chapana jako nularni funkce vracejici vzdy hodnotu 3 (coz muze byt formalne jine vyjadreni vzajemne struktury mnozin - teorie mnozin).

    Nevim proc se Vam stale nelibi pohlizet na primitivni typy jako na objekty. Kdyby od zacatku byli primitivni typy v Jave navrzene jako objektove, pak byste se nad tim nepozastavovali (bylo by to asi i formalne cistsi).

    Zopakuji ze autoboxing se pouziva tam, kde je potreba objektovy typ a v pripade ze je predlozen primitivni typ je implicitne vytvoren odpovidajici objektovy typ. A stejne tak naopak.

    V pripade ze jsou zde dve pretezovane metody
    f(int) a f(Object) predpokladam ze vyraz f(3) povede k volani f(int) a ne k autoboxingu a volani f(Object).