Quelles sont exactement les différences entre les variables , les objects et les références ?
Par exemple: ils pointent tous vers un type et ils doivent tous contenir des valeurs (à moins bien sûr que vous ayez le type null-able temporaire), mais comment leurs fonctions et leurs implémentations sont-elles différentes les unes des autres?
Exemple:
Dog myDog = new Dog(); //variable myDog that holds a reference to object Dog int x = 12; //variable x that hold a value of 12
Ils ont les mêmes concepts, mais en quoi sont-ils différents?
(Juste pour être clair, l’explication que je donne ici est spécifique à Java et à C #. Ne supposez pas qu’elle s’applique à d’autres langages, même si certains peuvent en contenir.)
J’aime utiliser une analogie pour dire à quelqu’un où je vis. Je pourrais écrire mon adresse sur une feuille de papier:
Est ce que ça aide?
La différence entre un type de valeur et un type de référence est ce qui est écrit sur le morceau de papier. Par exemple, ici:
int x = 12;
c’est comme avoir un morceau de papier sur lequel le numéro 12 est écrit directement. Tandis que:
Dog myDog = new Dog();
n’écrit pas le contenu de l’object Chien lui-même sur le morceau de papier – il crée un nouveau Dog
, puis écrit une référence au chien sur ce papier.
En termes non analogiques:
Button
, la valeur sera toujours une référence à un object de type Button
ou à une sous-classe – ou à la référence null
.) .
opérateur. Par exemple, si foo
est une variable Person
, foo.getAddress().getLength()
prend la valeur de foo
(une référence) et appelle getAddress()
sur l’object auquel cette référence fait référence. Le résultat pourrait être une référence Ssortingng
… nous appelons ensuite getLength()
sur l’object auquel cette référence fait référence. J’utilise souvent l’analogie suivante pour expliquer ces concepts.
Imaginez qu’un object est un ballon. Une variable est une personne. Chaque personne est dans l’équipe de type valeur ou dans l’équipe de type référence . Et ils jouent tous un petit jeu avec les règles suivantes:
Règles pour les types de valeur :
Règles pour les types de référence :
Vous pouvez y penser comme une réponse aux questions.
Un object est un quoi …
C’est comme toute chose physique dans le monde, une “chose” qui est reconnaissable par elle-même et qui possède des propriétés significatives qui la distinguent des autres “choses”. Comme vous le savez, un chien est un chien car il aboie, bouge sa queue et va après une balle si vous le lancez.
Une variable est une qui …
Comme si vous surveilliez vous-même. Chacun est une main elle-même. Ils ont des doigts, des ongles et des os dans la peau, mais vous savez que l’un est votre main gauche et l’autre le droit. C’est-à-dire que vous pouvez avoir deux “choses” du même type / type mais que chacune peut être différente à sa manière, avoir des valeurs différentes.
Une référence est un où …
Si vous regardez deux maisons dans une rue, même si elles ont leur propre façade, vous pouvez vous rendre à chacune d’elles par leur adresse unique, ce qui signifie que si vous êtes loin, à trois rues de distance ou dans un autre pays, vous pourriez Dites l’adresse de la maison car ils seront toujours là où vous les avez laissés, même si vous ne pouvez pas les pointer directement.
Maintenant, pour la programmation, des exemples de manière C ++
class Person{...} Person Ana = new Person(); //An object is an instance of a class(normally)
C’est-à-dire qu’Ana est une personne, mais elle possède des propriétés uniques qui la distinguent d’une autre personne.
&Ana //This is a reference to Ana, that is to say, a "where" does the variable //"Ana" is stored, wether or not you know it's value(s)
Ana
elle-même est la variable pour stocker les propriétés de la personne nommée “Ana”
La réponse de Jon est excellente pour l’aborder par analogie. Si un libellé plus concret vous est utile, je peux intervenir.
Commençons par une variable. Une variable est une chose [nommée] qui contient une valeur. Par exemple, int x = 3
définit une variable nommée x, qui contient le nombre entier 3. Si je le suis ensuite avec une affectation, x=4
, x contient maintenant le nombre entier 4. L’essentiel est de ne pas remplacer la variable Nous n’avons pas de nouvelle “variable x dont la valeur est maintenant 4”, nous avons simplement remplacé la valeur de x par une nouvelle valeur.
Passons maintenant aux objects. Les objects sont utiles car souvent vous avez besoin d’une “chose” à référencer de nombreux endroits. Par exemple, si un document est ouvert dans un éditeur et que vous souhaitez l’envoyer à l’imprimante, il serait intéressant de ne disposer que d’un seul document, référencé à la fois par l’éditeur et par l’imprimante. Cela vous éviterait d’avoir à le copier plus de fois que vous ne le souhaiteriez.
Cependant, comme vous ne voulez pas le copier plus d’une fois, nous ne pouvons pas simplement placer un object dans une variable. Les variables conservent une valeur, donc si deux variables sont contenues dans un object, elles doivent faire deux copies, une pour chaque variable. Les références sont l’intermédiaire qui résout ce problème. Les références sont de petites valeurs faciles à copier qui peuvent être stockées dans des variables.
Donc, dans le code, lorsque vous tapez Dog dog = new Dog()
, le nouvel opérateur crée un nouvel object Dog et renvoie une référence à cet object, de sorte qu’il puisse être affecté à une variable. L’atsortingbution donne ensuite à dog
la valeur d’une référence à votre object nouvellement créé.
new Dog () instanciera un object Dog ie) il créera une mémoire pour l’object. Vous devez accéder à la variable pour manipuler certaines opérations. Pour cela, vous avez besoin d’une référence qui est Dog myDog. Si vous essayez d’imprimer l’object, il imprimera une valeur non lisible qui n’est rien d’autre que l’adresse.
myDog -------> new Dog().