java - le passage d'un double de la valeur par référence
comment puis-je passer une double valeur par référence en java?
exemple:
Double a = 3.0;
Double b = a;
System.out.println("a: "+a+" b: "+b);
a = 5.0;
System.out.println("a: "+a+" b: "+b);
ce code imprime:
a: 3 b: 3
a: 5 b: 3
et mon problème est de le faire imprimer:
a: 3 b: 3
a: 5 b: 5
mon objectif:
Je suis en train d'écrire un système expert à jess, qui demande un segment aurait un double de la valeur pour la longueur, maintenant que le double de la valeur n'est pas dans un seul secteur; il est dans de nombreux autres secteurs, la proportionnalité des classes..etc, qui sont tous de référencement, en attente pour le changement de sorte qu'elles pourraient éventuellement répondre à certaines règles.
si je ne peux pas obtenir le double de changer, je ne peux pas avoir une certaine règle de feu qui contient un objet qui fait référence à la double valeur.
ou pour être plus précis en.wikipedia.org/wiki/Evaluation_strategy#Call_by_sharing
OriginalL'auteur Ouais | 2011-04-21
Vous devez vous connecter pour publier un commentaire.
Java ne supporte pas les pointeurs, de sorte que vous ne pouvez pas pointer vers une mémoire directement (comme en C /C++).
Java prend en charge les références, mais les références ne sont que des références à des Objets. Natif (built-in) types de ne peut pas être référencé. Ainsi, lorsque vous avez exécuté (l'autoboxing converti le code pour vous à la suivante).
Double a = new Double(3.0);
Qui signifie que lorsque vous exécutez
vous gagnez une référence à un Objet. Lorsque vous choisissez de changer (l'autoboxing finira par convertir votre code ci-dessus)
Qui n'auront pas d'impact b, la référence à la déjà créé
new Double(3.0)
. En d'autres termes, vous ne pouvez pas d'impact b, la référence en manipulant directement (ou il n'y a aucune "action à distance" en Java).Cela dit, il existe d'autres solutions
OriginalL'auteur Edwin Buck
Le wrapper types immuables Java. Une fois qu'ils sont créés, leur valeur ne peut pas être changé (sauf par la réflexion de la magie, bien sûr). Pourquoi essayez-vous de faire ce que vous faites?
Edit:
Juste pour élaborer, lorsque vous définissez:
Ce qui finit par arriver à quelque chose comme:
Si double ont été mutable, vous pourriez faire quelque chose comme
Bien sûr, vous pouvez écrire votre propre classe, mais il y a beaucoup de pièges ici, il est donc préférable d'expliquer que vous êtes objectif
Non, vous avez raison de l'avoir des classes de tenir des "Segments" plutôt que de Double. Cela rend l'intention claire, et dans le cas où vous jamais modifier le jeu pour utiliser autre chose que des doubles, il y a un petit impact. Ne vous inquiétez pas sur de trop nombreuses classes, en programmation orientée objet, il est (presque) pas une telle chose comme trop grand nombre de classes.
Je suppose que c'est l'explication la plus plausible de le faire, merci.
OriginalL'auteur Java Drinker
Vous pouvez essayer
MutableDouble
de commons-lang.Mais pas que cela n'a rien à voir avec pass-by-reference - vous n'êtes pas passer quelque chose.
en Java, vous ne pouvez pas passer la référence elle-même - que vous passez la valeur de la référence. Lorsque vous ne
a=5.0
, ce n'est pas la mêmea
c'est à 5.0 - si c'était vrai alorsb
aurait 5 ainsi.OriginalL'auteur Bozho
@Titre: Vous ne pouvez pas sans "sale" trucs et astuces. La méthode la plus simple est de passer un tableau ou une classe contenant le champ. Les modifications apportées à ces sera reflété l'amende juste.
Mais le problème est quelque chose de complètement différent: les chambres Doubles sont immuables, de sorte que chaque modification, il sera de retour une nouvelle valeur. Il n'y a rien que vous pouvez faire à ce sujet, en dehors de la mise en œuvre de votre propre classe.
OriginalL'auteur Voo
Double est immuable en Java. L'affectation a = 5.0 n'est pas de changer le Double de la valeur de un. C'est en fait la création d'un tout nouveau Double objet et de modifier la valeur du pointeur de la souris que se tient au point de ce nouvel objet. Si vous voulez être en mesure de modifier la valeur sans modifier la référence, vous avez besoin de faire une mutable Double.
Alors que vous appelleriez.setValue(5.0); et les deux se changer.
OriginalL'auteur Affe
Vous ne pouvez pas. En java, vous ne pouvez pas sélectionner le mode (par valeur ou par ref) par des paramètres qui seront passés à une méthode.
OriginalL'auteur kunal