MC600 - Segundo semestre de 2003 - LISTA 11 ------------------------------------------- 1. Considere as duas classes definidas abaixo: public class Ponto{ public int x; public int y; public Ponto(int x, int y){ this.x = x; this.y = y; } } public class Retangulo { public int largura = 0; public int altura = 0; public Point origem; public Retangulo(Ponto p, int l, int a) { origem = p; largura = l; altura = a; } // Um metodo para mover o retangulo public void move(int x, int y) { origem.x = x; origem.y = y; } // um metodo para calcular a area do retangulo public int area() { return largura * altura; } } O código a seguir cria um Ponto e um Retângulo. Ponto ponto = new Ponto(3,5); Retangulo retangulo = new Retangulo(ponto, 20, 40); ponto = null a. Quantas referências há para cada um destes objetos depois que este trecho de código é executado? b. Qual destes objetos pode ser eliminado se a máquina virtual resolver executar um procedimento de "garbage collection"? c. A reposta para o item b mudaria se o método retangulo.move( new Ponto(3,5) ) fosse chamado logo depois de ponto = null? Por que? Respostas: a. 1 referência para Ponto e 1 referência para Retangulo b. Nenhum c. Sim, porque se perderia a referência para o primeiro 'new Ponto(3,5)' e ele seria eliminado se o garbage collection fosse executado. 2. Considere a String abaixo: String Oops = "Houston, we have a problem!"; 0123456789012 a. Qual o valor retornado pela chamada do método Oops.charAt(12)? b. Defina uma expressão* que retorna o caracter '!'. c. Defina uma expressão* que retorna a String "Houston". * Esta expressão tem, obviamente, que usar a string referenciada por Oops! Resposta: a) Caracter retornado: "h" b) Oops.charAt(Oops.length()-1) c) Oops substring(0,7) 3. Qual o valor retornado pela expressão Integer(1).equals(new Long(1))? Por que? Resposta: false. Porque o método equal do objeto da clase Integer retorna true se e somente se o argumento passado não é nulo e é um objeto da clase Integer que contém o mesmo valor inteiro (int) do objeto que executou o método. 4. Que expressão usa-se para obter o tamanho de um vetor vet ? E de uma string str ? Resposta: Para obter o tamanho de um vetor vet: int length = vet.length; Para obter o tamanho de uma string str: int length = str.length(); 5. Se s1 e s2 são instâncias da classe StringBuffer, qual é a diferença entre a comparação s1 == s2 e a comparação s1.equals(s2)?