$show=/label

Java Supports Pass By Value only, not Pass By Ref

SHARE:

Does Java supports Pass By Value or Pass By Reference:   Very common question in java interviews for freshers and experienced. But, thi...

Does Java supports Pass By Value or Pass By Reference:

 

Very common question in java interviews for freshers and experienced. But, this is very tricky and confusion for most of the people whether java is pass by value or pass by reference.

First, we will make clear what is call by value and call by reference. These two comes into play when we pass parameters in invoking a method.

java-pass-by-value




Call By Value: Values only passed as copy of original. But not original memory location. It creates a new copy in the memory and passes to the method that we invoked.

Call By Reference: Passes reference or alias of the object which is said to be Call By Reference. Unfortunately, Java inventors decided to call the location of an object as a "reference". When we pass the value of an object, we are passing the reference to it. This is confusing to beginners.

Remember, all objects that are created using new operator will be created in heap memory where as all local variables or primitives types are created as part of Stack memory. Stack memory is allocated when a thread starts its execution.

We will demonstrate using the following program.


Pass By Value Example:



package blog.java.w3schools.passbyvalue;

//java-w3schools blog
public class PassByValueExample {

    public static void main(String[] args) {

        int side = 10;
        Square s = new Square();
        System.out.println("side value: " + side);
        s.printArea(side);
        System.out.println("side value After calling printArea is : " + side);
    }
}

class Square {

    public void printArea(int side) {
        side = side * side;
        System.out.println("Inside printArea : " + side);
    }
}


Output:


side value: 10
Inside printArea : 100
side value After calling printArea is : 10

Created a class named Square and method printArea which takes argument side int primitive type.
Once we run the program, main method will start execution which is main thread. side is a int variable and its value is 10.
Created a Square object, printed side value & Could see it as 10.
Now calling printArea method of s and passing side variable. Inside method doing arithmetic operation on it, printing value. it is now 100.
After executing printArea method, controller comes back to the main method and prints side value but we see it as 10 only. That means original variable value is not at all changed. Only copy of variable value was changed.



Pass By Reference Example:


This below example looks like we are passing same reference to the method. You have to remember that a new reference will be created and its passed to it. But, both references will be pointing to the same object in the heap untill it is reassigned with the new object.


package blog.java.w3schools.passbyvalue;

//java-w3schools blog
public class PassByValueExample {

    public static void main(String[] args) {

        Square s1 = new Square(20);
        System.out.println("s1 side value: " + s1.getSide());
        passReference(s1);
        System.out.println("side value After calling printArea is : " + s1.getSide());
    }


    public static void passReference(Square square) {
        square = new Square(30);
        System.out.println("new object value : " + square.getSide());
    }
}


class Square {
    int side;

    public Square(int side) {
        this.side = side;
    }

    public void setSide(int side) {
        this.side = side;
    }

    public int getSide() {
        return side;
    }
}


Output:


s1 side value: 20
new object value : 30
side value After calling printArea is : 20
Please Observe, even though passing the reference to the method, original value is not changed after reassigning with new value inside method passReference.

Summary:


Java supports only Pass By Value but when we passes references and it is not reinitialized then it looks like values are modified of the original object. This is correct. But here you have to catch the point is a new reference is created and pass to the method but original and new references will be pointing to the same object in the head memory location.

COMMENTS

BLOGGER

About Us

Author: Venkatesh - I love to learn and share the technical stuff.
Name

accumulo,1,ActiveMQ,2,Adsense,1,API,37,ArrayList,18,Arrays,24,Bean Creation,3,Bean Scopes,1,BiConsumer,1,Blogger Tips,1,Books,1,C Programming,1,Collection,8,Collections,37,Collector,1,Command Line,1,Comparator,1,Compile Errors,1,Configurations,7,Constants,1,Control Statements,8,Conversions,6,Core Java,149,Corona India,1,Create,2,CSS,1,Date,3,Date Time API,38,Dictionary,1,Difference,2,Download,1,Eclipse,3,Efficiently,1,Error,1,Errors,1,Exceptions,8,Fast,1,Files,17,Float,1,Font,1,Form,1,Freshers,1,Function,3,Functional Interface,2,Garbage Collector,1,Generics,4,Git,9,Grant,1,Grep,1,HashMap,2,HomeBrew,2,HTML,2,HttpClient,2,Immutable,1,Installation,1,Interview Questions,6,Iterate,2,Jackson API,3,Java,32,Java 10,1,Java 11,6,Java 12,5,Java 13,2,Java 14,2,Java 8,128,Java 8 Difference,2,Java 8 Stream Conversions,4,java 8 Stream Examples,12,Java 9,1,Java Conversions,14,Java Design Patterns,1,Java Files,1,Java Program,3,Java Programs,114,Java Spark,1,java.lang,4,java.util. function,1,JavaScript,1,jQuery,1,Kotlin,11,Kotlin Conversions,6,Kotlin Programs,10,Lambda,2,lang,29,Leap Year,1,live updates,1,LocalDate,1,Logging,1,Mac OS,3,Math,1,Matrix,6,Maven,1,Method References,1,Mockito,1,MongoDB,3,New Features,1,Operations,1,Optional,6,Oracle,5,Oracle 18C,1,Partition,1,Patterns,1,Programs,1,Property,1,Python,2,Quarkus,1,Read,1,Real Time,1,Recursion,2,Remove,2,Rest API,1,Schedules,1,Serialization,1,Servlet,2,Sort,1,Sorting Techniques,8,Spring,2,Spring Boot,23,Spring Email,1,Spring MVC,1,Streams,31,String,61,String Programs,28,String Revese,1,StringBuilder,1,Swing,1,System,1,Tags,1,Threads,11,Tomcat,1,Tomcat 8,1,Troubleshoot,26,Unix,3,Updates,3,util,5,While Loop,1,
ltr
item
JavaProgramTo.com: Java Supports Pass By Value only, not Pass By Ref
Java Supports Pass By Value only, not Pass By Ref
https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiPwdtWrJW1YH3vl3iZ8NBuJvN4HgFEF7z4KE92oOnp2F_Rh65VpBr7ifG0jnsJRQI1J82KJQQqzUAVC35UQs848D5LsOy-OV0-vgMOmus0Y12aQa1DrhNhWnj_lCvyiyMJAnlQ_lNCCe0/s320/17+java-pass-by-value.jpg
https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiPwdtWrJW1YH3vl3iZ8NBuJvN4HgFEF7z4KE92oOnp2F_Rh65VpBr7ifG0jnsJRQI1J82KJQQqzUAVC35UQs848D5LsOy-OV0-vgMOmus0Y12aQa1DrhNhWnj_lCvyiyMJAnlQ_lNCCe0/s72-c/17+java-pass-by-value.jpg
JavaProgramTo.com
https://www.javaprogramto.com/2017/11/java-pass-by-value.html
https://www.javaprogramto.com/
https://www.javaprogramto.com/
https://www.javaprogramto.com/2017/11/java-pass-by-value.html
true
3124782013468838591
UTF-8
Loaded All Posts Not found any posts VIEW ALL Readmore Reply Cancel reply Delete By Home PAGES POSTS View All RECOMMENDED FOR YOU LABEL ARCHIVE SEARCH ALL POSTS Not found any post match with your request Back Home Sunday Monday Tuesday Wednesday Thursday Friday Saturday Sun Mon Tue Wed Thu Fri Sat January February March April May June July August September October November December Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec just now 1 minute ago $$1$$ minutes ago 1 hour ago $$1$$ hours ago Yesterday $$1$$ days ago $$1$$ weeks ago more than 5 weeks ago Followers Follow THIS PREMIUM CONTENT IS LOCKED STEP 1: Share to a social network STEP 2: Click the link on your social network Copy All Code Select All Code All codes were copied to your clipboard Can not copy the codes / texts, please press [CTRL]+[C] (or CMD+C with Mac) to copy Table of Content