Em minha opinião, A reposta é a:
f. Uma exceção será lançada em tempo de execução
O programa está a tentar “passar” para a primeira linha de argCopy, que tem somente 2 colunas, um array de 3 elementos: 1 2 3 (argumentos de linha de comandos). Logo, sera gerada uma excepção ao tentar copiar o terceiro elemento (que “não cabe” em argCopy).
Penso que este será o resultado obtido. Mas não há nada como experimentar…
[quote=diego2005]Pessoal, qual a resposta correta para a seguinte questão:
[code]public class CommandArgs
{
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]);
}
}[/code]
a chamada de linha de comando sendo:
java ComandArgs 1 2 3
qual será o resultado?
a. 0 0
b. 1 2
c. 0 0 0
d. 1 2 3
e. A compilação falhará
f. Uma exceção será lançada em tempo de execução
Fiquei na dúvida, quem puder responder e comentar o por que da resposta…[/quote]
Pois é, a resposta correta é a letra D, mas por que??? O que acontece quando atribuimos um array maior a um menor??? Eu també pensei que fosse a letra F.
Você criou um array de arrays de Strings, com duas posições cada e aproveitou e já criou dois arrays de Strings com duas posições cada também.
Assim, argCopy[0] está referenciando um array de Strings com duas posições, enquanto argCopy[1] está referenciando outro array de Strings com duas posições. Mas o que a assinatura “String[][] argCopy” indica é que cada uma das duas posições de argCopy deve referenciar um array de Strings, não limita a quantidade. Ou seja, a linha:
Faz com que a primeira posição de argCopy referencie o array referenciado por args. A segunda continua referenciando o array de Strings com que argCopy foi inicializado, então:
imprimiria 2.
Da mesma forma, o seguinte código funcionaria numa boa:
String[][] outroArray = new String[3][3];
argCopy = outroArray;
Claro que, neste caso, argCopy[0] não referenciaria mais o mesmo array que args referencia, mas sim um array de Strings com 3 posições, com null em cada uma.