• Post Reply Bookmark Topic Watch Topic
  • New Topic
programming forums Java Mobile Certification Databases Caching Books Engineering Micro Controllers OS Languages Paradigms IDEs Build Tools Frameworks Application Servers Open Source This Site Careers Other Pie Elite all forums
this forum made possible by our volunteer staff, including ...
Marshals:
  • Campbell Ritchie
  • Jeanne Boyarsky
  • Ron McLeod
  • Paul Clapham
  • Liutauras Vilda
Sheriffs:
  • paul wheaton
  • Rob Spoor
  • Devaka Cooray
Saloon Keepers:
  • Stephan van Hulst
  • Tim Holloway
  • Carey Brown
  • Frits Walraven
  • Tim Moores
Bartenders:
  • Mikalai Zaikin

The output of the following programs

 
Greenhorn
Posts: 2
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator



Ans is 4




Ans is 1


can you please explain me the concept behind this ??
 
lowercase baba
Posts: 13089
67
Chrome Java Linux
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
I have added code tags to your post, to make it easier to read.

May I suggest you post what your confusion is? Were you expecting something different in each case, and if so, what did you expect?
 
Greenhorn
Posts: 13
Java Linux
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
Ok let me try to explain the concepts behind all of this to you.

Fist example explanation:

When you do this:
int i[] = {0};

You're actually declaring an integer array reference variable (i), constructing an one-element one-dimension array object of integers in memory (the heap) and assigning 0 or initializing the array element with 0.

it's like: int[] i = new int[1]; i[0] = 0;

The array reference variable "i" isn't actually the array object, it is just a reference holding the address of where in memory the created array object is. Reference variables are just variables that can point to objects of a specific type in memory.

When you pass a object reference variable to a method (change_i(i); in the first example) you are passing the object reference (the address of how to get to the object) not the real object and then you assign that address to another reference variable of the same type inside the method. It's like pointing the variable inside the method to the same object the variable outside the method is referring to so you can access the same object with both variables.

That's why when you assign another value or modify the value of the array element by means of the "inside the method reference variable" you can access that element with the reference variable outside the method because both are pointing to the same object in memory (the heap).


Second example explanation:

When you pass primitive variables you are passing a copy of the value of that primitive variable to the method. The variable declared inside the method definition is just a different variable that happens to have the same name as the variable declared outside the change_i method and that gets a copy of the value of the variable passed to it. Whatever modification you do inside the method is to the value of the inside variable.

So the System.out.println(i) is actually printing the variable outside the method which is holding 1.

Try to print i inside the method and you will print out the modification. you an even modify the method to return a int and return the modification and assign it back to the i variable declared outside.

Hope you can get the concepts.
 
yash khandelwal
Greenhorn
Posts: 2
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
thanks fred for adding the code tags
and Eduardo i get it ... thankyou !
 
reply
    Bookmark Topic Watch Topic
  • New Topic