IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Java Discussion :

String - Surdéfinition de l'opérateur(+)


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 10
    Par défaut String - Surdéfinition de l'opérateur(+)
    Bonjour,

    Je débute en Java, pas tout à fait, j'ai lu et fais la majorité des exemples de "Programmer en Java" de Claude D.

    Ma question portant sur l'opérateur (+).
    Pourquoi est-il possible d'écrire le code suivant ?

    String s1 = new String("Bonjour ");
    String s2 = new String("monsieur");

    String s3 = s1 + s2;

    En me référant à mes connaissances du C++, il semble que pour la classe String, l'opérateur (+) est surdéfini.

    Si tel est le cas, quel est le prototype de cette surdéfinition ?
    Dans le cas contraire, en vertue de quoi cette écriture est-elle possible ?

    Merci d'avance.
    Cordialement

  2. #2
    Membre émérite
    Profil pro
    Inscrit en
    Février 2007
    Messages
    572
    Détails du profil
    Informations personnelles :
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Février 2007
    Messages : 572
    Par défaut
    Il n'y a pas de surcharge d'opérateur en java.

    L'addition de deux String fait partie des specifications du langage

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 10
    Par défaut
    Tout d'abord merci de votre réponse.

    Je poursuis ... pour comprendre.

    String est une classe comme une autre, ce n'est donc pas un type de base de Java.

    Pourquoi l'addition de deux String fait-elle partie des spécifications ?

    Merci d'avance.

    Cordialement

  4. #4
    Rédacteur
    Avatar de eclesia
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    2 111
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 111
    Par défaut
    la classe String est un cas particulier. Son usage est tellement courant qu'elle a eu droit a certain petit bonus par rapport aux classes normales.

    un objet de classe String est immuable, donc toute actions ou methodes dessus te renvoi un nouvel objet de classe String.

    si je me plante pas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    String s3 = s1 + s2;
    c'est la meme chose que ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    String s3 = new StringBuffer(s1).append(s2).toString();

  5. #5
    Membre émérite
    Profil pro
    Inscrit en
    Février 2007
    Messages
    572
    Détails du profil
    Informations personnelles :
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Février 2007
    Messages : 572
    Par défaut
    La classe String fait partie du specification du langage, comme la classe Object par exemple (cf §4.3.3 des specifications du langage).
    L'operateur + sur String est decrit dans le §15.18.1

    Utiliser l'operateur + sur les String peut amener java, en théorie, a creer des String intermediaires. Par exemple, en ecrivant a+b+c, on a une string de creer pour a+b, puis pour l'addition du resultat de a+b avec c.
    Une recommandation de la spec préconise que le compilateur remplace dans ce cas l'operation par l'utilisation de StringBuffer, comme l'a ecrit eclesia.

    Voila un lien sur les specs du langage : ici

    Tu y trouveras d'autres subtilités comme par exemple l'outboxing.

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 10
    Par défaut
    Bonsoir,

    Merci à tous les deux.

    A bientôt, très certainement pour d'autres questions.

    Cordialement.

  7. #7
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 909
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 909
    Billets dans le blog
    54
    Par défaut
    Citation Envoyé par Sanguko Voir le message
    Une recommandation de la spec préconise que le compilateur remplace dans ce cas l'operation par l'utilisation de StringBuffer, comme l'a ecrit eclesia.
    C'est quelques chose qu'il faut garder a l'esprit quand on concatene beaucoup de chaines : il ne s'agit que d'une recommandation. Le compilateur de Sun la suit, mais le compilateur d'un kit de devel d'un autre vendeur ou d'une JVM qui serait plus conservatrice sur la quantite d'objets crees (ex : sur mobile) pourrait ne pas la suivre. C'est pour cela qu'il faut quand meme faire attention a l'utilisation du + et quand il y en a trop preferer l'utilisation manuelle (et bien controlee, il ne faut pas non-plus faire n'importe quoi avec) des StringBuilder/StringBuffer.
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. enlever les opérateurs && et || d'un string
    Par hynposat7 dans le forum Langage
    Réponses: 9
    Dernier message: 03/12/2008, 16h56
  2. Surdéfinition de l'opérateur de cast (void *)
    Par Thierry Chappuis dans le forum C++
    Réponses: 4
    Dernier message: 07/12/2006, 11h21
  3. Réponses: 1
    Dernier message: 03/04/2006, 23h15
  4. Redéfinition / Surdéfinition d'opérateur
    Par slate dans le forum C++
    Réponses: 12
    Dernier message: 17/02/2006, 02h17
  5. POO + surdéfinition d'opérateur - Visual Studio
    Par mike109g dans le forum Visual C++
    Réponses: 2
    Dernier message: 13/11/2004, 16h27

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo