Bem-vindo ao Java String Quiz. String é uma das classes mais importantes em Java. Se você já programou em Java, deve tê-la utilizado.
A string é muito popular quando se trata de perguntas ou quizzes de entrevista em Java. Então, eu reuni algumas perguntas de quiz interessantes e complicadas sobre strings em Java que você deveria tentar.
Java String Quiz
Há 21 perguntas neste quiz. Se você conseguir responder corretamente a 15 ou mais, considere-se realmente bom em conceitos de strings. Você pode verificar a resposta e a explicação detalhada clicando no botão “Revelar Resposta” após cada pergunta.
Vamos começar o String Quiz e boa sorte.
1. Qual será a saída das seguintes declarações?
String s = "Java String Quiz";
System.out.println(s.charAt(s.toUpperCase().length()));
A. Convert “Z” to int 90 and prints “90”
B. Runtime Exception
C. Prints “z”
D. Prints “Z”
Click to Reveal Answer
**Resposta Correta: B
**
Isso lançará a exceção de tempo de execução.Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 16
Isso ocorre porque o valor do índice começa em 0.
2. Qual será a saída das seguintes declarações?
String s = "Java String Quiz";
System.out.println(s.substring(5,3));
A. Prints “Str”
B. Runtime Exception
C. IndexOutOfBoundsException Runtime Exception
D. StringIndexOutOfBoundsException Compile-time error
Click to Reveal Answer
**Resposta Correta: B
**
Isso lançará a exceção de tempo de execução com a mensagem de erro Exception in thread "main" java.lang.StringIndexOutOfBoundsException: begin 5, end 3, length 16
. Isso ocorre porque o índice de fim é menor que o índice de início.
3. Selecione todos os métodos válidos da classe String.
A. trim()
B. intern()
C. toLower()
D. split()
Click to Reveal Answer
Resposta Correta: A, B
Métodos válidos da classe String são – trim(), intern(), toLowerCase() e split(String regex).
4. Qual será a saída das seguintes declarações?
String s1 = "Cat";
String s2 = "Cat";
String s3 = new String("Cat");
System.out.print(s1 == s2);
System.out.print(s1 == s3);
A. truefalse
B. truetrue
C. falsefalse
D. falsetrue
Click to Reveal Answer
**Resposta Correta: A
**
Quando usamos aspas duplas para criar uma String, primeiro procuramos por uma String com o mesmo valor no pool de Strings. Se encontrarmos, retornamos a referência, caso contrário, criamos uma nova String no pool e retornamos a referência.
No entanto, ao usar o operador new, forçamos a classe String a criar um novo objeto String no heap. Portanto, s1 e s2 terão referência para a mesma String no pool, enquanto s3 será um objeto diferente fora do pool, daí a saída.
5. Quais das seguintes afirmações são verdadeiras para uma string em um caso switch?
A. String is allowed in switch case for Java 1.5 or higher versions.
B. String is allowed in switch case for Java 1.7 or higher versions.
C. The equals() method is used by switch-case implementation, so add null check to avoid NullPointerException.
6. Quais das seguintes afirmações são verdadeiras para StringBuffer e StringBuilder?
A. StringBuilder is not thread-safe.
B. StringBuffer is thread safe because its methods are synchronized.
C. StringBuilder was introduced in Java 1.4
D. StringBuffer and StringBuilder are immutable.
Click to Reveal Answer
Resposta Correta: A, B
O objeto StringBuffer é thread-safe porque seus métodos são sincronizados. Mas isso é um sobrecarga na maioria dos casos, por isso o StringBuilder foi introduzido no Java 1.5. O StringBuilder não é thread-safe. StringBuffer e StringBuilder são classes mutáveis. Leia mais em String vs StringBuffer vs StringBuilder.
7. A implementação da classe String segue qual padrão de design abaixo?
A. Flyweight Design Pattern
B. Factory Pattern
C. Singleton Pattern
D. None of the above
Click to Reveal Answer
Resposta Correta: A
Implementação da piscina de strings segue o padrão de design flyweight.
8. Qual será a saída das declarações abaixo?
String s1 = "abc";
String s2 = "def";
System.out.println(s1.compareTo(s2));
A. 0
B. true
C. -3
D. false
Click to Reveal Answer
**Resposta Correta: C
**
A partir da documentação do método compareTo() da classe String:
O método compareTo compara duas strings lexicograficamente. A comparação é baseada no valor Unicode de cada caractere nas strings. A sequência de caracteres representada por este objeto String é comparada lexicograficamente com a sequência de caracteres representada pela string de argumento. O resultado é um número inteiro negativo se este objeto String preceder lexicograficamente a string de argumento. O resultado é um número inteiro positivo se este objeto String seguir lexicograficamente a string de argumento. O resultado é zero se as strings forem iguais; compareTo retorna 0 exatamente quando o método equals(Object) retornaria verdadeiro.
Esta é a definição de ordenação lexicográfica. Se duas strings são diferentes, então elas têm caracteres diferentes em algum índice que é um índice válido para ambas as strings, ou seus comprimentos são diferentes ou ambos. Se elas têm caracteres diferentes em uma ou mais posições de índice, seja k o menor desses índices; então a string cujo caractere na posição k tem o valor menor, determinado usando o operador < lexicograficamente precede a outra string. Nesse caso, compareTo retorna a diferença dos dois valores de caracteres na posição k nas duas strings, ou seja, o valor:
this.charAt(k)-anotherString.charAt(k)
No nosso exemplo, “abc” precede “def”, portanto, um número inteiro negativo é retornado. Em seguida, o índice mais baixo com um caractere diferente é 0 e a-d é igual a -3.
9. Qual será a saída do programa abaixo?
public class Test {
public static void main(String[] args) {
String x = "abc";
String y = "abc";
x.concat(y);
System.out.print(x);
}
}
A. abc
B. abcabc
C. null
Click to Reveal Answer
Resposta correta: A
O x.concat(y)
irá criar uma nova string, mas não é atribuída a x, então o valor de x não é alterado.
10. Qual será a saída do programa abaixo?
public class Test {
public static void main(String[] args) {
String s1 = "abc";
String s2 = "abc";
System.out.println("s1 == s2 is:" + s1 == s2);
}
}
A. false
B. s1 == s2 is:true
C. s1 == s2 is:false
D. true
Click to Reveal Answer
Resposta correta: A
A saída das instruções fornecidas será “false”, porque no Java o operador + tem precedência maior do que o operador ==. Portanto, a expressão fornecida será avaliada como “s1 == s2 é: abc” == “abc”, ou seja, falso.
11. Qual será a saída das seguintes instruções?
String s = "Java"+1+2+"Quiz"+""+(3+4);
System.out.println(s);
A. Java3Quiz7
B. Java12Quiz7
C. Java12Quiz34
D. Java3Quiz34
Click to Reveal Answer
Resposta correta: B
Primeiro, a expressão dentro do colchete é executada. Em seguida, todos os operadores + são executados da esquerda para a direita.
Obtemos uma string com cada concatenação, portanto, a saída é produzida da seguinte forma:
“Java”+1+2+”Quiz”+””+(3+4)
= “Java”+1+2+”Quiz”+””+7
= “Java1″+2+”Quiz”+””+7
= “Java12″+”Quiz”+””+7
= “Java12Quiz”+””+7
= “Java12Quiz”+7
= “Java12Quiz7”
12. Quantos objetos String são criados nas seguintes instruções?
String s = "abc"; // statement 1
String s1 = new String("abcd"); // statement 2
A. 1
B. 2
C. 3
D. 4
Click to Reveal Answer
Resposta correta: C
No comando 1, “abc” é criado no pool de strings.
Na afirmação 2, primeiramente “abcd” é criado no pool de strings. Em seguida, ele é passado como um argumento para o novo operador String e outra string é criada na memória heap.
Então um total de 3 objetos string são criados.
13. Qual será a saída das seguintes afirmações?
String s1 = "abc";
String s2 = new String("abc");
System.out.print(s1==s2);
System.out.println(s1==s2.intern());
A. falsetrue
B. falsefalse
C. truetrue
D. truefalse
Click to Reveal Answer
Resposta Correta: A
O s1 está no pool de strings enquanto o s2 é criado na memória heap.
Portanto, s1==s2 retornará falso.
Quando o método s2.intern()
é chamado, ele verifica se existe alguma string com valor “abc” no pool. Então ele retorna a referência de s1. Então ambos s1 e s2 estão apontando para a mesma instância de string agora.
Portanto, s1==s2.intern() retornará verdadeiro.
14. Selecione todas as interfaces implementadas pela classe String.
A. Serializable
B. Comparable
C. Constable
D. Cloneable
Click to Reveal Answer
Resposta Correta: A, B, C
A String é serializável e comparável. Constable é uma nova interface a partir do lançamento do Java 12.
15. Selecione todas as razões que fazem da String um candidato perfeito para a chave do Map.
A. String is immutable
B. String is final
C. String properly implements hashCode() and equals() method
C. String hashcode is cached
Click to Reveal Answer
**Resposta Correta: A, B, C
**
A implementação adequada dos métodos hashCode() e equals() é necessária para uma chave do Map. Como a string é final e imutável, não há chances de corrupção dos dados da chave.
16. Qual será a saída do seguinte trecho de código?
String s1 = new String("java");
String s2 = new String("JAVA");
System.out.println(s1 = s2);
A. JAVA
B.java
C. true
D. false
Click to Reveal Answer
**Resposta Correta: A
**
Ele imprimirá “JAVA” porque o argumento dentro do método println() é uma atribuição. Então ele será tratado como System.out.println("JAVA")
.
17. Qual será a saída das seguintes afirmações?
String s1 = "abc";
StringBuffer s2 = new StringBuffer(s1);
System.out.println(s1.equals(s2));
A. false
B. true
C. ClassCastException at runtime
D. Compile-time error
Click to Reveal Answer
Resposta Correta: A
Ele imprimirá falso porque s2 não é do tipo String. Se você olhar a implementação do método equals() da String, encontrará uma verificação usando o operador `instanceof` para verificar se o tipo do objeto passado é uma String. Se não for, então retorna falso.
18. Qual será a saída do trecho de código abaixo?
String s1 = "abc";
String s2 = new String("abc");
s2.intern();
System.out.println(s1 == s2);
A. false
B. true
C. null
Click to Reveal Answer
Resposta Correta: A
É uma pergunta complicada e a saída será falsa. Sabemos que o método intern() retornará a referência do objeto String do pool de strings, mas como não o atribuímos de volta a s2, não há alteração em s2. Portanto, tanto s1 quanto s2 têm uma referência diferente.
Se alterarmos o código na linha 3 para s2 = s2.intern();
então a saída será verdadeira.
19. Selecione todas as classes que estendem a classe String.
A. StringBuffer
B. StringBuilder
C. StringWriter
D. None
Click to Reveal Answer
**Resposta Correta: D
**
É uma pergunta complicada. A String é uma classe final, então você não pode estendê-la.
20. Quais das seguintes afirmações são verdadeiras sobre String em Java?
A. We can extend String class like StringBuffer does it.
B. String class is defined in java.util package.
C. String is immutable in Java.
D. String is thread-safe in Java.
E. String is case sensitive in Java.
Click to Reveal Answer
Resposta Correta: C, D, E
Não podemos estender a classe String porque ela é final. StringBuffer não a estende. A classe String é definida no pacote `java.lang`. A string é imutável e, portanto, segura para threads em Java. String é sensível a maiúsculas e minúsculas, então “abc” não é igual a “ABC”.
21. Qual será a saída das instruções abaixo?
String s1 = null;
System.out.print(s1); // line 2
System.out.print(s1.toString()); // line 3
A. nullnull
B. null followed by NullPointerException
C. NullPointerException
Click to Reveal Answer
Resposta Correta: B
A linha 2 imprimirá `null` porque o método `print` tem uma verificação de nulo assim:
if (s == null) { s = "null";}
A linha 3 lançará NullPointerException porque estamos tentando invocar a função toString() em null.
Conclusão
I have tried to cover most of the important points about String in this Quiz. If you think some interesting concept has been missed, please let me know through comments. If you liked the Quiz, share it with others too.
Source:
https://www.digitalocean.com/community/tutorials/java-string-quiz