/*******************************************************************************
 * Třída HodnotyAOdkazy obsahuje statickou metodu testík, která demonstruje
 * rozdíl mezi hodnotovými a referenčními (=odkazovými) 
 * objektovými datovými typy.
 *
 * @author     Rudolf Pecinovský
 * @version    1.00, květen 2004
 */
public class HodnotyAOdkazy
{
    /***************************************************************************
     * Demonstruje rozdíl mezi ohodnotovými a referenčními 
     * objektovými datovými typy.
     */
    public static void testík()
    {
        //Definujeme tři proměnné hodnotového typu String
        String hodnota_1 = "První";
        String hodnota_2 = "Druhý";
        //Druhá a třetí proměnná bude odkazovat na stejný objekt
        String hodnota_3 = hodnota_2;   
        
        //Definujeme tři proměnné referenčního typu Strom
        Strom_4 odkaz_1 = new Strom_4();
        Strom_4 odkaz_2 = new Strom_4();
        //Druhá a třetí proměnná bude odkazovat na stejný objekt
        Strom_4 odkaz_3 = odkaz_2;
        
        System.out.println ( "Stav před úpravou:\n" + 
            hodnota_1 + "\n" + hodnota_2 + "\n" + hodnota_3 + "\n\n" +
            odkaz_1   + "\n" + odkaz_2   + "\n" + odkaz_3 );
            
        //Změním hodnotu objektu odkazovaného druhou proměnnou
        
        //U hodnotových typů bude objekt nahrazen jiným
        hodnota_2 = hodnota_2 + "+doplněk";
        
        //U odkazovaných objektů se změní pouze stav objektu
        odkaz_2.posunVpravo();
        
        System.out.println ( "\n\nStav po úpravě:\n" + 
            hodnota_1 + "\n" + hodnota_2 + "\n" + hodnota_3 + "\n\n" +
            odkaz_1   + "\n" + odkaz_2   + "\n" + odkaz_3 );
    }
    
}

