Java Programming - Operators and Assignments - Discussion

Discussion Forum : Operators and Assignments - Finding the output (Q.No. 1)
1.
What will be the output of the program?
class PassA 
{
    public static void main(String [] args) 
    {
        PassA p = new PassA();
        p.start();
    }

    void start() 
    {
        long [] a1 = {3,4,5};
        long [] a2 = fix(a1);
        System.out.print(a1[0] + a1[1] + a1[2] + " ");
        System.out.println(a2[0] + a2[1] + a2[2]);
    }

    long [] fix(long [] a3) 
    {
        a3[1] = 7;
        return a3;
    }
}
12 15
15 15
3 4 5 3 7 5
3 7 5 3 7 5
Answer: Option
Explanation:

Output: 15 15

The reference variables a1 and a3 refer to the same long array object. When the [1] element is updated in the fix() method, it is updating the array referred to by a1. The reference variable a2 refers to the same array object.

So Output: 3+7+5+" "3+7+5

Output: 15 15 Because Numeric values will be added

Discussion:
43 comments Page 4 of 5.

Sarang said:   1 decade ago
a1[0]=3,a1[1]=7,a1[2]=5;a2[0]=3,a2[1]=7,a2[2]=5
a1[0]+a1[2]+a1[3]=15 & a2[0]+a2[2]+a2[3]=15 ..

Arnab said:   1 decade ago
I didn't understand....the arguement in fix() in the calling function is a1 whose values are copied in a3. So why the hell a1 gonna be updated if a3 is changed! Besides the return keyword returns the updated value to a2 not to a1. .....!!!!!!

Debojyoti Bose said:   1 decade ago
The situation, when working with arrays, is somewhat different. If we were to make copies of arrays to be sent to methods, we could potentially be copying very large amounts of data.
Not very efficient!
Arrays are passed-by-reference. Passing-by-reference means that when an array is passed as an argument, its memory address location is actually passed, referred to as its "reference". In this way, the contents of an array CAN be changed inside of a method, since we are dealing directly with the actual array and not with a copy of the array.

int [ ] num = {1, 2, 3};
testingArray(num); //Method call
System.out.println("num[0] = " + num[0] + "\n num[1] = " + num[1] + "\n num[2] =" + num[2]);
. . .

//Method for testing
public static void testingArray(int[ ] value)
{
value[0] = 4;
value[1] = 5;
value[2] = 6;
}
Output:
num[0] = 4
num[1] = 5
num[2] = 6
(The values in the array have been changed.
Notice that nothing was "returned".)
You will need to be careful when sending an array to a method. Remember that any changes made to the array in the method will change the data in the original array. Be sure that your intention is to change the original data (thus losing the original data).

Nagarjuna said:   2 decades ago
Can any one tell me why a1[] will also change.

Veerraju said:   1 decade ago
Please tell me fix() method from which class and which package.

Abdul Sattar said:   1 decade ago
If we write this:

long [] a2 = a1;

which means the address of a1 is being assigned to a2,therefore a2 also contains same elements as a1.

long [] a2 = fix(a1);

the fix(a1); is only replacing the element at a1[1] which is 4 by 7, and assigning the address of a1 to a2n now both a1 and a2 contains same data elements.

up to this point a1 should contains {3,7,5} not {3,4,5}

so the output should be 375 375

why 15 15..........?

Suresh said:   1 decade ago
@Abdul.

Numeric values will be added in the print statements.

Jegathees said:   1 decade ago
Why & how to change a1[1] value is 7?

Vikas verma said:   1 decade ago
How can the value of a1[1] is change in this prog ?

And a1[] is not given equal to a3[] anywhere in this program.

Can any one Explain this?

Pranjal shukla said:   1 decade ago
Please try this code, then you will come know that all array a1, a2, a3 having same memory reference which is display by,

sys.out.println("a1="+a1);

That's why when we change value of second element (1 index) to array a3 it will reflected to all other array objects a1 and a2.

Because memory address or reference to a1, a2, a3 is same..for me it is,

a3 = [J@1f33675.
a1 = [J@1f33675.
a2 = [J@1f33675.

And as we know all writing operation perform to some memory location.so we write some memory location for a3.

That's why value 7 is updated to all arrays a1, a2, a3 because we write at some memory location and a1, a2, a3 pointing the same memory location.

So key point is "Reference is same".

Now o/p is.

a1 = 3,7,5
a2 = 3,7,5
a3 = 3,7,5

Hence o/p is 15, 15.

class PassA
{
public static void main(String [] args)
{

PassA p = new PassA();
p.start();
}

void start()
{
long [] a1 = {3,4,5};

long [] a3=a1;
System.out.println("a3=" +a3);
System.out.println("a1=" +a1);

long [] a2 = fix(a1);
System.out.println("a2=" +a2);
System.out.print(a1[0] + a1[1] + a1[2] + " ");
System.out.println(a2[0] + a2[1] + a2[2]);
}

long [] fix(long [] a3)
{

a3[1] = 7;
return a3;
}
}


Post your comments here:

Your comments will be displayed after verification.