Questionário de Strings em Java

Bem-vindo ao Quiz de Java String. String é uma das classes mais importantes em Java. Se você já programou em java, deve ter usado.

A string é muito popular quando se trata de perguntas de entrevista ou quiz de java. Então, eu reuni algumas ótimas e complicadas perguntas de quiz de java string que você deveria tentar.

Quiz de Java String

Há 21 perguntas neste quiz. Se você conseguir responder corretamente 15 ou mais, então considere-se realmente bom em conceitos de String. Você pode verificar a resposta e explicação detalhada clicando no botão “Revelar Resposta” após cada pergunta.

Vamos começar o Quiz de String e boa sorte.

1. Qual será a saída das declarações abaixo?

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
**
Ele lançará a exceção em tempo de execução.Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 16 Isso acontece porque o valor do índice começa a partir de 0.

2. Qual será a saída das declarações abaixo?

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
**
Ele lançará a exceção em tempo de execução com a mensagem de erro como Exception in thread "main" java.lang.StringIndexOutOfBoundsException: begin 5, end 3, length 16. Isso acontece porque o índice final é menor que o índice inicial.

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 instruções abaixo?

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, ela primeiro procura uma String com o mesmo valor no pool de Strings. Se encontrada, retorna a referência; caso contrário, cria uma nova String no pool e retorna a referência.

No entanto, usando 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 strings em um switch case?

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.

Click to Reveal Answer

Resposta Correta: B, C

Leia mais em java switch case string

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 overhead na maioria dos casos, portanto, 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 String segue qual dos padrões 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

A implementação da pool 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() de 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 argumento. O resultado é um número inteiro negativo se este objeto String precede lexicograficamente a string de argumento. O resultado é um número inteiro positivo se este objeto String segue 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 tiverem caracteres diferentes em uma ou mais posições de índice, seja k o menor índice tal; então a string cujo caractere na posição k tem o valor menor, como determinado usando o operador < lexicograficamente precede a outra string. Neste caso, compareTo retorna a diferença dos dois valores de caracteres na posição k nas duas strings – isto é, o valor:

this.charAt(k)-anotherString.charAt(k)

No nosso exemplo, “abc” precede “def”, portanto, é retornado um número inteiro negativo. 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 método x.concat(y) criará uma nova string, mas ela não é atribuída a x, portanto 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 em Java o operador + tem precedência sobre 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 entre parênteses é executada. Em seguida, os operadores + são executados da esquerda para a direita.

Obtemos uma String com cada concatenação, portanto, a saída é produzida como mostrado abaixo.

“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 trecho 1, “abc” é criado no pool de Strings.

Na afirmação 2, primeiramente “abcd” é criado no pool de strings. Depois, ele é passado como um argumento para o operador String new e outra string é criada na memória heap.

Portanto, um total de 3 objetos de string são criados.

13. Qual será a saída das seguintes declaraçõ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. Assim, 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

String é serializável e comparável. Constable é uma nova interface do lançamento do Java 12.

15. Selecione todas as razões que tornam a String candidata perfeita 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() é indispensável para uma chave de 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. Portanto, será tratado como System.out.println("JAVA").

17. Qual será a saída das seguintes declaraçõ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

Imprimirá false porque s2 não é do tipo String. Se você observar a implementação do método equals() da classe String, encontrará uma verificação usando o operador instanceof para verificar se o tipo do objeto passado é String. Se não for, retorna false.

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á false. 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 referências diferentes.

Se mudarmos o código na linha 3 para s2 = s2.intern();, então a saída será true.

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 classe String é final, portanto, não é possível 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 é 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. A String diferencia maiúsculas de minúsculas, então “abc” não é igual a “ABC”.

21. Qual será a saída das seguintes declarações?

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