Java: passer des paramètres par valeur ou par référence

Une explication simple des principes de passage de paramètres en Java.





De nombreux programmeurs confondent souvent quels paramètres en Java sont passés par valeur et lesquels par référence. Visualisons ce processus, puis vous verrez à quel point tout est simple.





Commençons par les bases.





Les données sont transmises entre les méthodes via des paramètres. Il existe deux façons de passer des paramètres:





  1. (by value). . . , .





  2. (by reference). () . , . , , , .





Java :





  1. , , .





  2. — (heap).





: ?





Java





, .





Exemple de passage de primitives par valeur

Java , processData



. , ( main



) .





:





Transfert d'objets

? Java , ? , Java - ? , . : "Java ".





, .





Mémoire de pile et de tas
(stack) (heap)

, ,  fruits



processData



. fruitRef



fruit



. fruits



fruitsRef



. . , . , , , .





:





Passer un objet par référence
Mémoire de pile et de tas
(stack) (heap)

fruitRef



new



. fruitRef



, , , , , .





, Java . .





.





, .





Suppression d'un nœud dans une liste liée

:





class Node {
   int data;
   Node next;
   Node(int d){
       data = d;
       next = null;
   }
}
class LinkedList {
   public static Node push(Node head, int data) {
       Node newNode = new Node(data);
       newNode.next = head;
       head = newNode;
       return head;
   }
   public static void deleteNode(Node head, int position) {
  
       // List is empty
       if (head == null){
           return;
       }

      // If position is 1st, removing head node
      if (position == 1) {
          head = head.next;
          return;
      }
      Node prevNode = head;
      int i = 2;
      while (prevNode != null && i != position) {
          prevNode = prevNode.next;
          i++;
      }
     // When position is more than number of node
     if (prevNode == null || prevNode.next == null) {
         return;
     }
     prevNode.next = prevNode.next.next;
   }
   public static void printList(Node head) {
       Node currNode = head;
       while (currNode != null) {
           System.out.print(currNode.data + " ");
           currNode = currNode.next;
       }
   }
   public static void main(String[] args) {
       Node head = null;
       head = push(head, 5);
       head = push(head, 4);
       head = push(head, 3);
       head = push(head, 2);
       head = push(head, 1);
       System.out.println("Created Linked list is: ");
       printList(head);

       // Delete node at position 2
       deleteNode(head, 2);

       System.out.println("\nLinked List after Deletion at position 2: ");
       printList(head);
   }
}

      
      



, — (Position = 1



). , ? , .





Suppression du premier nœud d'une liste liée individuellement

:





public static Node deleteNode(Node head, int position) {
   // List is empty
   if (head == null){
      return head;
   }

   // If position is 1st, removing head node
   if (position == 1) {
       head = head.next;
       return head;
   }
   Node prevNode = head;
   int i = 2;
   while (prevNode != null && i != position) {
       prevNode = prevNode.next;
       i++;
   }
   // When position is more than number of node
   if (prevNode == null || prevNode.next == null) {
       return head;
   }
   prevNode.next = prevNode.next.next;
   return head;
}
public static void main(String[] args) {
   Node head = null;
   head = push(head, 5);
   head = push(head, 4);
   head = push(head, 3);
   head = push(head, 2);
   head = push(head, 1);
   System.out.println("Created Linked list is: ");
   printList(head);

   // Delete node at position 2
   head = deleteNode(head, 2);

   System.out.println("\nLinked List after Deletion at position 2: ");
   printList(head);
}
//Rest of the code remains same

      
      



, Java: . 






" Oracle Java Programmer (OCAJP)".





, 15 .












All Articles