Java Programming - Language Fundamentals - Discussion
Discussion Forum : Language Fundamentals - Finding the output (Q.No. 1)
1.
What will be the output of the program?
public class CommandArgsThree
{
public static void main(String [] args)
{
String [][] argCopy = new String[2][2];
int x;
argCopy[0] = args;
x = argCopy[0].length;
for (int y = 0; y < x; y++)
{
System.out.print(" " + argCopy[0][y]);
}
}
}
and the command-line invocation is
> java CommandArgsThree 1 2 3
Answer: Option
Explanation:
In argCopy[0] = args;, the reference variable argCopy[0], which was referring to an array with two elements, is reassigned to an array (args) with three elements.
Discussion:
36 comments Page 1 of 4.
John said:
2 years ago
Please explain the answer clearly.
(1)
Surbhi said:
5 years ago
Thank you so much for explaining. It's very useful.
(2)
Sajid Ali said:
6 years ago
If array is declared as int a[2][2] = new int [2][2];
Then it only take a[0][0], a[0][1] and a[1][0], a[1][1] how could it takes 3 value while it initialise on a[0] that can only hold 2 a[0][0],a[0][1] values, it must throw array index out of bound exception or leave third value.
Then it only take a[0][0], a[0][1] and a[1][0], a[1][1] how could it takes 3 value while it initialise on a[0] that can only hold 2 a[0][0],a[0][1] values, it must throw array index out of bound exception or leave third value.
(7)
Priyanka said:
8 years ago
String [][] argCopy = new String[2][2];
argCopy is declared with 2-dimensional array. Their size is 2. How can be assigned the value to a[0][2]?
argCopy is declared with 2-dimensional array. Their size is 2. How can be assigned the value to a[0][2]?
Jeet said:
8 years ago
See the default values for the arrays are like;
String [][] argCopy = {{null,null},{null,null}};
String[] args = {1,2,3};
When we assign argCopy[0] = args;
argCopy[0] = {1,2,3} and
x = argCopy[0].length; which is = 3
Hence the output as
argCopy[0][0] = 1;
argCopy[0][1] = 2;
argCopy[0][2] = 3;
String [][] argCopy = {{null,null},{null,null}};
String[] args = {1,2,3};
When we assign argCopy[0] = args;
argCopy[0] = {1,2,3} and
x = argCopy[0].length; which is = 3
Hence the output as
argCopy[0][0] = 1;
argCopy[0][1] = 2;
argCopy[0][2] = 3;
(14)
Sharma said:
8 years ago
I can't understand. How output will 1, 2, 3?
Rajgopal bhallamudi said:
8 years ago
Here is my clear explanation of what is happening internally.
argCopy initially contains [ [null,null],[null,null] ]
argCopy[0]=[null,null]
argCopy[1]=[ [null,null]
while args initially contains 1 2 3.
Now after this assignment argCopy[0] = args;,
argCopy changes to,
[ [1,2,3],[null,null] ]
argCopy initially contains [ [null,null],[null,null] ]
argCopy[0]=[null,null]
argCopy[1]=[ [null,null]
while args initially contains 1 2 3.
Now after this assignment argCopy[0] = args;,
argCopy changes to,
[ [1,2,3],[null,null] ]
(2)
Mohammed Salman said:
8 years ago
Hello, Everyone.
1. Initially, argcopy is a reference to a 2D array object.
2. When argcopy[0]=args, that is the "argscopy" reference will be pointing to an array of "args".
3. Hence it prints the value inside the "args" array.
4. Finally, the 2D array becomes an anonymous object.
Hope everyone understands.
1. Initially, argcopy is a reference to a 2D array object.
2. When argcopy[0]=args, that is the "argscopy" reference will be pointing to an array of "args".
3. Hence it prints the value inside the "args" array.
4. Finally, the 2D array becomes an anonymous object.
Hope everyone understands.
NiroshKumar B said:
10 years ago
args[0]=1.
args[1]=2.
args[2]=3.
In this statement: argcopy[0] = args; -> [[0, 1], [0, 1]] = [1, 2, 3].
0 1 0 //after that.
0 1 2.
-> [[1, 2, 3], [0, 1]] //assign like this.
0 1.
-> So length y is 3 -> [1, 2, 3].
y.
-> argcopy[0][0] = 1.
argcopy[0][1] = 2.
argcopy[0][2] = 3.
args[1]=2.
args[2]=3.
In this statement: argcopy[0] = args; -> [[0, 1], [0, 1]] = [1, 2, 3].
0 1 0 //after that.
0 1 2.
-> [[1, 2, 3], [0, 1]] //assign like this.
0 1.
-> So length y is 3 -> [1, 2, 3].
y.
-> argcopy[0][0] = 1.
argcopy[0][1] = 2.
argcopy[0][2] = 3.
Kiran said:
10 years ago
argCopy[0] = args;
Because of this line argCopy[0] will point to args's base address, suppose 100, so the values are like at 100 ->1, at next address means base+size of the string (length) i.e.101->2, 103->3.
So when we access argCopy[0][0] it will point to base+0 i.e 100 address location that have value 1.
argCopy[0][1] it will point to base+1 i.e 101 address location that have value 2.
argCopy[0][2] it will point to base+2 i.e 102 address location that have value 3.
So it will print 1 2 3, irrespective of declaration[2][2].
Because of this line argCopy[0] will point to args's base address, suppose 100, so the values are like at 100 ->1, at next address means base+size of the string (length) i.e.101->2, 103->3.
So when we access argCopy[0][0] it will point to base+0 i.e 100 address location that have value 1.
argCopy[0][1] it will point to base+1 i.e 101 address location that have value 2.
argCopy[0][2] it will point to base+2 i.e 102 address location that have value 3.
So it will print 1 2 3, irrespective of declaration[2][2].
Post your comments here:
Quick links
Quantitative Aptitude
Verbal (English)
Reasoning
Programming
Interview
Placement Papers