Implizite Konversion in String



  • Warum geht

    String a; 
    a = 1;
    

    nicht?

    Oder folgendes:

    class BigInt
    {
    	private String text;
    
    	BigInt(String d)
    	{
    		text = new String(d);
    	}
    
    	BigInt(int i)
    	{
    		text = Integer.toString(i);
    	}
    
    	void print()
    	{
    		System.out.println(text);
    	}
    
    	String toString()
    	{
    		return new String(text);
    	}
    
    	BigInt add(BigInt b)
    	{
    		String tmp = b;  // <- Warum geht das nicht?
    
    		return new BigInt("100");
    	}
    }
    


  • Die Klasse macht für mich ehrlich gesagt nicht viel Sinn.
    Du kannst einem String nicht einfach ein Objekt zuweisen.
    Du hast doch schon toString() implementiert.

    String tmp = b.toString();
    


  • > Du kannst einem String nicht einfach ein Objekt zuweisen.

    Weißt du etwa nicht das toString keine "gewöhnliche" Methode ist?

    Methode toString:
    Objekt verfügbar wo String gebraucht: Automatischer Aufruf der Methode "toString" mit der Schnittstelle:
    public String toString();

    class BigInt 
    { 
    	private String text; 
    
    	BigInt(String d) 
    	{ 
    		text = new String(d); 
    	} 
    
    	BigInt(int i) 
    	{ 
    		text = Integer.toString(i); 
    	} 
    
    	void print() 
    	{ 
    		System.out.println(text); 
    	} 
    
    	public String toString() 
    	{ 
    		return new String(text); 
    	} 
    
    	BigInt add(BigInt b) 
    	{ 
    		String tmp = b + "";  // <- Funktioniet - cool oder nicht?
    
    		return new BigInt("100"); 
    	} 
    }
    


  • Warum geht

    String a;
    a = 1;
    

    nicht?

    Das ist leicht zu erklären: Es gibt keine implizierte Konvertierung von <Werttyp> in <Referenztyp>.

    Du wunderst dich jetzt wahrscheinlich, warum

    String myString = "uksgdf" + 5;
    

    geht. Das liegt einzig und allein daran, dass "sudfhsö" + 5 nicht so stehenbleibt.

    Der Compiler macht daraus

    String myString = (new StringBuffer()).append("skugf").append(5).toString();
    

    Sogar das Literal "uksgf" bleibt so nicht stehen. Der Compiler macht daraus

    new String(new char[] {'u', 'k', 's', 'g', 'f'})
    

    Interessanter Link



  • Weißt du etwa nicht das toString keine "gewöhnliche" Methode ist?

    Öhm, ich habs dir doch erklärt. Deine Zuweisung geht halt einfach nicht.
    Und die Methode toString() (aus Object wie du wohl auch weisst) soll halt eine geeignete String-Repräsentation eines Objekts liefern. Und dann kannst du an einen String zuweisen!



  • ok sorry... 🙄


Anmelden zum Antworten