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 :

pourquoi instanciation implicite


Sujet :

Langage Java

  1. #1
    Membre éclairé Avatar de fantomas261
    Inscrit en
    Avril 2007
    Messages
    486
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 486
    Par défaut pourquoi instanciation implicite
    bjr,

    je voudrais savoir pourquoi on n ecrit pas de "new" ds cet exemple :
    String str = "abc";
    parce que str contient une constante ?

    char data[] = {'a', 'b', 'c'};
    String str = new String(data); pourquoi on ecrit "new" ici

    pareil pour les tableau

    int[] entier ={1,2,3}
    int[] entier = new int[] {1,2,3}

  2. #2
    Membre émérite Avatar de benratti
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    471
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2004
    Messages : 471
    Par défaut
    En fait, tu fait deux choses différents.

    Dans le premier cas, "abc" est un object String, tu fait une simple affectation, donc. L'object existe déjà.

    Dans le second cas, en plus de l'affectation, tu construis un object String à partir d'un tableau de caractère. Ton tableau de caractère n'est pas un object String, tu as donc besoin de faire appel au constructeur String et donc de faire appel à "new".

    Bref, dans un cas, tu utilises un objet qui existe déjà.

  3. #3
    Membre éclairé Avatar de fantomas261
    Inscrit en
    Avril 2007
    Messages
    486
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 486
    Par défaut
    je croyais qu on creait un objet à chaque fois qu on fesait "new", pour moi (String str = "abc"; ) str est une variable locale

  4. #4
    Membre Expert
    Avatar de gifffftane
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 354
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire (Rhône Alpes)

    Informations forums :
    Inscription : Février 2007
    Messages : 2 354
    Par défaut
    À ce sujet les choses sont assez bien expliquées, me semble-t-il, dans The Java Language Specification, à String Literals. C'est un peu chercher les détails, mais pour la culture générale, cela peut être utile un jour où l'autre.

    Le principal à retenir est que l'expression "toto" est une référence à un objet de la class String contenant toto. Quand est-ce que cet objet est créé, d'où sort-il, c'est un peu secondaire. Ils précisent tout de même que cet objet est mémorisé en interne, et que, à peu de choses prés, l'expression "toto" désignera partout le même objet ; en particulier "toto" == "toto" true.

  5. #5
    Membre éclairé Avatar de fantomas261
    Inscrit en
    Avril 2007
    Messages
    486
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 486
    Par défaut
    en faite, ecrire String str = "abc"; c est juste un racourci ?

Discussions similaires

  1. Pourquoi instancier une classe String ?
    Par Thoustra dans le forum Débuter avec Java
    Réponses: 20
    Dernier message: 25/11/2010, 13h26
  2. Pourquoi runat="server" n'est il pas implicite.
    Par aityahia dans le forum ASP.NET
    Réponses: 4
    Dernier message: 10/08/2008, 10h05
  3. Pourquoi ne peut-on pas instancier de tableau paramétré ?
    Par LGnord dans le forum Collection et Stream
    Réponses: 2
    Dernier message: 28/03/2008, 08h59
  4. [C# 2.0] Pourquoi mon DataAdapter n'est pas instancié ?
    Par FraktaL dans le forum Services Web
    Réponses: 2
    Dernier message: 04/07/2006, 00h04
  5. Réponses: 12
    Dernier message: 14/07/2005, 16h55

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