Considérons le code suivant en Java.Les objets peuvent-ils être transmis par valeur plutôt que par référence en Java?
package obj;
final class First
{
public int x;
public First(int x)
{
this.x=x;
}
}
final class Second
{
public Second(First o)
{
o.x=10;
}
}
final public class Main
{
public static void main(String[] args)
{
First f=new First(50);
Second s=new Second(f);
System.out.println("x = "+f.x);
}
}
Dans le code ci-dessus, nous fournissons une valeur 50 à la déclaration First f=new First(50);
qui est attribué à un membre de la classe x de type int dans le corps du constructeur dans la classe Première.
Dans la classe deuxième, l'objet f de la classe Première est transmis par la déclaration Deuxième s = new deuxième (f); et nous modifions la valeur de la variable d'instance x détenue dans cet objet à 10 qui affectera l'objet original f car les objets Java sont toujours passés par référence et non par valeur.
Dans certaines situations spécifiques, il peut être crucial de ne pas autoriser de tels changements sur les objets d'origine. Existe-t-il un mécanisme en Java qui pourrait nous permettre d'empêcher de telles modifications? (Cela pourrait nous permettre de passer des objets par valeur)
Il est probablement aussi important de mentionner que la plupart des classes du système de base ne feront que des copies superficielles, donc de faire une copie profonde d'une liste vous devez créer une nouvelle liste, puis parcourir la liste d'origine en créant des copies profondes du contenu – chrisbunney