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 :

Pointeur c/c++ et java


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2004
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2004
    Messages : 63
    Par défaut Pointeur c/c++ et java
    Bonjour,

    Je tien d'abord à signaler que c'est mon premier jour de programmation Java...

    En C++ quand on doit faire passer un gros tableau à une fonction, on utilise les pointeurs pour de meilleur performances...

    En java il parait que les pointeurs n'existe pas, alors comment fait-on pour passer un gros tableau d'une fonction membre d'une classe à une autre ?

    Merci d'avance...

  2. #2
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Salut,


    Ce problème ne se pose pas...
    Je m'explique : en java les tableaux sont des objets, et tout les objets sont passés par référence.

    En Java le terme "référence" englobe la notion de pointeur. C'est à dire que lorsqu'on passe un objet à une méthode, on passe toujours une référence à cet objet et non pas une copie...

    a++

  3. #3
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 900
    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 900
    Billets dans le blog
    54
    Par défaut
    C++ références:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
     
    class MaClasse : public SuperClasse {
    public:
      MaClasse() {
      }
     
      ~MaClasse() {
      }
     
      void maMethode(std::string& p1, MonAutreClasse& p2) throw (MonException, MonException2);
    }
     
    void MaClasse::maMethode(std::string& p1, MonAutreClasse& p2) throw (MonException1, MonException2) {
      p2.monAutreMethode(p1.c_str());
      ...
      if (testd'erreurquelconque) {
        throw MonException2();
      }
      ...
    }
    C++ pointeurs:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
     
    class MaClasse : public SuperClasse {
    public:
      MaClasse() {
      }
     
      ~MaClasse() {
      }
     
      void maMethode(std::string* p1, MonAutreClasse* p2) throw (MonException, MonException2);
    }
     
    void MaClasse::maMethode(std::string* p1, MonAutreClasse* p2) throw (MonException1, MonException2) {
      p2->monAutreMethode(p1->c_str());
      ...
      if (testd'erreurquelconque) {
        throw MonException2();
      }
      ...
    }
    Java:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    public class MaClasse extends SuperClass {
      public MaClasse() {
      }
     
      public void MaClasse::maMethode(String p1, MonAutreClasse p2) throws  MonException1, MonException2 {
        p2.monAutreMethode(p1);
        ...
        if (testd'erreurquelconque) {
          throw new MonException2();
        }
        ...
      }
    }
    En effet bien que Java manipule des références:
    - notation '.' similaire aux références C++.
    - impossibilité d'obtenir l'addresse mémoire d'un objet ou de déférencer une référence.
    - impossibilité de faire de l'arithmetique des pointeurs.
    - passage par référence* lors de l'appel de methode.

    *Note : sauf pour les littéraux (int, float, ...) qui sont copiés.

    Certains comportement sont cependant plus proches des pointeurs C++ :
    - les références Java peuvent être null**, comme un pointeur C++ peut-être NULL.
    - les références Java sont initialisées avec l'opérateur new** comme les pointeurs C++.

    ** Sauf les littéraux qui peuvent avoir des valeurs par défaut (0 ou 0.0 pour les nombres, false pour les booléens).

    Ainsi en Java passer un tableau (même un tableau de littéraux) à une fonction sera un passage de la référence de cet objet => donc pas de copie = exactement la même optimisation qu'en passant le pointeur ou la référence de ce tableau en C++.
    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

Discussions similaires

  1. Réponses: 4
    Dernier message: 02/08/2007, 14h11
  2. Difference entre pointeur REF et pointeur en Java ou C++
    Par lemagicien dans le forum Oracle
    Réponses: 4
    Dernier message: 21/03/2007, 16h01
  3. [info] taille des adresses des pointeurs Java
    Par TabrisLeFol dans le forum Général Java
    Réponses: 11
    Dernier message: 14/02/2006, 13h24
  4. [Language]Equivalent Java des pointeurs de fonctions du C/C++
    Par Thierry Chappuis dans le forum Langage
    Réponses: 1
    Dernier message: 25/11/2005, 15h14
  5. [debutant] correspondance JAVA C++ pour pointeur de fonction
    Par davidoff_tls dans le forum Langage
    Réponses: 7
    Dernier message: 15/04/2004, 09h13

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