package javacodebook.core.mutablenumber;

/**
 *
 * @author Mark Donnermeyer
 */
public class Starter {
    
    /**
     * Funktioniert wunderbar, da  Die Klasse MutableInteger 
     * die entsprechenden set-Methoden hat.
     */
    public static void swap(MutableInteger i1,
                            MutableInteger i2) {
        int tmp = i1.getValue();
        i1.setValue(i2.getValue());
        i2.setValue(tmp);
    }
    
    /**
     * Funktioniert leider nicht, da die Klasse Integer 
     * immutable (nicht veränderbar) ist.
     */
    public static void swap(Integer i1, Integer i2) {
        Integer tmp = i1;
        i1 = i2;
        i2 = tmp;
    }
        
    /**
     * Funktioniert leider nicht, da die Parameter 
     * "by value" übergeben werden
     */
    public static void swap(int i1, int i2) {
        int tmp = i1;
        i1 = i2;
        i2 = tmp;
    }    
    
    public static void main(String args[]) {

        // Parameteruebergabe mit int
        
        int pi1 = 2;
        int pi2 = 6;
        
        System.out.println("Vorher: ");
        System.out.println("i1 = " + pi1);
        System.out.println("i2 = " + pi2);
        
        swap(pi1, pi2);
        
        System.out.println("Nachher: ");
        System.out.println("i1 = " + pi1);
        System.out.println("i2 = " + pi2);

        // Parameteruebergabe mit Integer
        
        Integer i1 = new Integer(2);
        Integer i2 = new Integer(6);
        
        System.out.println("Vorher: ");
        System.out.println("i1 = " + i1);
        System.out.println("i2 = " + i2);
        
        swap(i1, i2);
        
        System.out.println("Nachher: ");
        System.out.println("i1 = " + i1);
        System.out.println("i2 = " + i2);
        
        // Parameteruebergabe mit MutableInteger
        
        MutableInteger mi1 = new MutableInteger(2);
        MutableInteger mi2 = new MutableInteger(6);
        
        System.out.println("Vorher: ");
        System.out.println("mi1 = " + mi1);
        System.out.println("mi2 = " + mi2);
        
        swap(mi1, mi2);
        
        System.out.println("Nachher: ");
        System.out.println("mi1 = " + mi1);
        System.out.println("mi2 = " + mi2);
    }
}