Java Perguntas e Respostas de Entrevista de String

Introdução

String é uma das classes Java mais amplamente utilizadas. Este artigo fornece algumas perguntas e respostas de prática sobre String para ajudá-lo a se preparar para uma entrevista.

Você também pode experimentar o Quiz de String Java para testar seu conhecimento da classe String.

O que é a classe String em Java? String é um tipo de dados?

String é uma classe em Java e é definida no pacote java.lang. Não é um tipo de dados primitivo como int e long. A classe String representa cadeias de caracteres. String é usada em quase todas as aplicações Java. String é imutável e final em Java e a JVM usa um pool de strings para armazenar todos os objetos String. Você pode instanciar um objeto String usando aspas duplas e pode sobrecarregar o operador + para concatenação.

Quais são algumas maneiras diferentes de criar um objeto String em Java?

Você pode criar um objeto String usando o operador new ou pode usar aspas duplas para criar um objeto String. Por exemplo:

String str = new String("abc");
String str1 = "abc";

Há vários construtores disponíveis na classe String para obter uma String a partir de array de char, array de byte, StringBuffer e StringBuilder.

Ao criar uma String usando aspas duplas, a JVM verifica no pool de Strings se alguma outra String está armazenada com o mesmo valor. Se a String já estiver armazenada no pool, a JVM retorna a referência a esse objeto String. Se a nova String não estiver no pool, a JVM cria um novo objeto String com o valor dado e o armazena no pool de Strings. Quando você usa o operador new, a JVM cria o objeto String mas não o armazena no pool de Strings. Você pode usar o método intern() para armazenar o objeto String no pool de Strings ou retornar a referência se já houver uma String com valor igual presente no pool.

Escreva um método Java para verificar se uma string de entrada é um palíndromo.

A string is a palindrome if its value is the same when reversed. For example, aba is a palindrome string. The String class doesn’t provide any method to reverse the string but the StringBuffer and StringBuilder classes have a reverse() method that you can use to check whether a string is a palindrome. For example:

private static boolean isPalindrome(String str) {
    if (str == null)
        return false;
    StringBuilder strBuilder = new StringBuilder(str);
    strBuilder.reverse();
    return strBuilder.toString().equals(str);
}

Às vezes, um entrevistador pode solicitar que você não use nenhuma outra classe para verificar um palíndromo. Nesse caso, você pode comparar os caracteres na string a partir de ambas as extremidades para descobrir se é um palíndromo. Por exemplo:

private static boolean isPalindromeString(String str) {
    if (str == null)
        return false;
    int length = str.length();
    System.out.println(length / 2);
    for (int i = 0; i < length / 2; i++) {
         if (str.charAt(i) != str.charAt(length - i - 1))
            return false;
    }
    return true;
}

Escreva um método Java que removerá um caractere dado de um objeto de string.

Podemos usar o método replaceAll para substituir todas as ocorrências de uma string por outra string. O ponto importante a observar é que replaceAll() aceita String como argumento, então você pode usar a classe Character para criar uma string e usá-la para substituir todos os caracteres por uma string vazia.

private static String removeChar(String str, char c) {
    if (str == null)
        return null;
    return str.replaceAll(Character.toString(c), "");
}

Como você pode tornar uma String maiúscula ou minúscula em Java?

Você pode usar a classe String e os métodos toUpperCase e toLowerCase para obter o objeto String em maiúsculas ou minúsculas. Esses métodos têm uma variante que aceita um argumento de Locale e usam as regras do local fornecido para converter a string para maiúsculas ou minúsculas.

O que é o método String subSequence?

O Java 1.4 introduziu a interface CharSequence e a classe String implementa essa interface, razão pela qual a classe String possui o método subSequence. Internamente, o método subSequence invoca o método String substring.

Como você compara duas strings em um programa Java?

Java `String` implementa a interface `Comparable`, que possui duas variantes do método `compareTo()`. O método `compareTo(String anotherString)` compara o objeto `String` com o argumento `String` passado lexicograficamente. Se o objeto `String` precede o argumento passado, ele retorna um número inteiro negativo, e se o objeto `String` segue o argumento passado, ele retorna um número inteiro positivo. Retorna zero quando ambos os objetos `String` têm o mesmo valor. Neste caso, o método `equals(String str)` também retorna `true`. O método `compareToIgnoreCase(String str)` é semelhante ao primeiro, exceto que ignora a caixa. Ele utiliza `Comparator` com `CASE_INSENSITIVE_ORDER` para comparação insensível a maiúsculas e minúsculas. Se o valor for zero, então `equalsIgnoreCase(String str)` também retornará true.

Como converter um `String` para um array de caracteres em Java?

A String object is a sequence of characters, so you can’t convert it to a single character. You can use use the charAt method to get the character at given index or you can use the toCharArray() method to convert a string to character array. Learn more about converting a string to a character array.

Como converter um `String` para um array de bytes em Java?

Pode usar o método getBytes() para converter um objeto String em uma matriz de bytes e pode usar o construtor new String(byte[] arr) para converter uma matriz de bytes em um objeto String. Saiba mais sobre converter uma string para uma matriz de bytes.

É possível usar String em um bloco switch case em Java?

O Java 7 estendeu a capacidade do bloco switch case para Strings; versões anteriores do Java não oferecem suporte a isso. Se estiver implementando fluxo condicional para strings, pode usar condições if-else e pode usar o bloco switch case se estiver usando o Java 7 ou versões superiores. Saiba mais sobre bloco switch case para strings em Java.

Escreva um programa Java para imprimir todas as permutações de uma string.

Você precisará usar recursão para encontrar todas as permutações de uma string. Por exemplo, as permutações de AAB são AAB, ABA e BAA. Você também precisa usar Set para garantir que não haja valores duplicados. Saiba mais sobre encontrar todas as permutações de uma string.

Escreva uma função Java para encontrar o palíndromo mais longo em uma string dada.

A string can contain palindrome substrings within it. Learn more about how to find the longest palindrome substring in a string.

Quais são as diferenças entre String, StringBuffer e StringBuilder em Java?

A String object is immutable and final in Java, so whenever you manipulate a String object, it creates a new String object. String manipulations are resource consuming, so Java provides two utility classes for string manipulations, StringBuffer and StringBuilder.

StringBuffer e StringBuilder são classes mutáveis. As operações de StringBuffer são seguras para threads e sincronizadas, enquanto as operações de StringBuilder não são seguras para threads. Você deve usar StringBuffer em um ambiente multi-thread e usar StringBuilder em um ambiente de thread único. O desempenho de StringBuilder é mais rápido que o de StringBuffer devido à ausência de sobrecarga de sincronização.

Saiba mais sobre as diferenças entre String, StringBuffer e StringBuilder e a avaliação comparativa de StringBuffer e StringBuilder.

Por que é que String é imutável em Java?

String é imutável em Java porque oferece várias vantagens:

  • O pool de strings é possível porque String é imutável em Java.
  • Aumenta a segurança porque nenhum hacker pode alterar seu valor e é usado para armazenar informações sensíveis como nome de usuário ou senha de banco de dados.
  • Como String é imutável, é seguro usar em multi-threading e você não precisa de sincronização.
  • As strings são usadas nos carregadores de classes Java e a imutabilidade fornece a garantia de que a classe correta está sendo carregada pela classe ClassLoader.

Saiba mais sobre por que String é imutável em Java.

Como você divide uma string em Java?

Você pode usar split(String regex) para dividir a String em uma matriz de String com base na expressão regular fornecida.

Por que uma matriz de caracteres é preferida sobre String para armazenar senhas em Java?

A String object is immutable in Java and is stored in the string pool. Once it’s created it stays in the pool until garbage collection completes, so even though you’re done with the password it’s available in memory for longer duration. It’s a security risk because anyone having access to memory dump can find the password as clear text. If you use a character array to store password, you can set it to blank once you’re done with it. You can control for how long it’s available in memory and that avoids the security threat.

Como você verifica se duas Strings são iguais em Java?

Existem duas maneiras de verificar se duas Strings são iguais. Você pode usar o operador == ou o método equals(). Quando você usa o operador ==, ele verifica o valor da String além da referência do objeto. Frequentemente na programação Java, você deseja verificar apenas a igualdade do valor da String. Nesse caso, você deve usar o método equals() para verificar se duas Strings são iguais. Existe outra função chamada equalsIgnoreCase que você pode usar para ignorar maiúsculas e minúsculas.

String s1 = "abc";
String s2 = "abc";
String s3 = new String("abc");

System.out.println("s1 == s2 ? " + (s1 == s2)); //true
System.out.println("s1 == s3 ? " + (s1 == s3)); //false
System.out.println("s1 equals s3 ? " + (s1.equals(s3))); //true

O que é o pool de strings em Java?

O pool de strings é um conjunto de objetos String armazenados na memória heap do Java. String é uma classe especial em Java e você pode criar um objeto String usando o operador new assim como fornecendo valores entre aspas duplas. Saiba mais sobre o pool de strings Java.

O que faz o método String intern() em Java?

Quando o método intern() é invocado, se o pool já contiver uma String igual a este objeto String, conforme determinado pelo método equals(Object), então a string do pool é retornada. Caso contrário, este objeto String é adicionado ao pool e uma referência a este objeto String é retornada. Este método sempre retorna um objeto String que tem o mesmo conteúdo que este String, mas é garantido que seja de um pool de strings únicas.

O String é thread-safe em Java?

A String object is immutable, so you can’t change its value after creation. This makes the String object thread-safe and so it can be safely used in a multi-threaded environment. Learn more about thread Safety in Java.

Uma vez que um objeto String é imutável, seu hashcode é armazenado no momento da criação e não precisa ser calculado novamente. Isso o torna um ótimo candidato para a chave em um Mapa, uma vez que seu processamento é mais rápido do que outros objetos chave de HashMap.

Adivinhe a Saída

Teste-se adivinhando a saída dos seguintes trechos de código Java.

public class StringTest {
    
  	public static void main(String[] args) {
   		String s1 = new String("digitalocean");
   		String s2 = new String("DIGITALOCEAN");
   		System.out.println(s1 = s2);
   	}
    
}
Output
DIGITALOCEAN

A saída é DIGITALOCEAN porque o código atribui o valor de String s2 a String s1. = é um operador de atribuição que atribui o valor de y a x no formato (x = y). == é um operador de comparação que verifica se o objeto de referência é o mesmo para as duas strings.


public class Test {
    
   	 public void foo(String s) {
   	 System.out.println("String");
   	 }
    
   	 public void foo(StringBuffer sb) {
   	 System.out.println("StringBuffer");
   	 }
    
   	 public static void main(String[] args) {
   		new Test().foo(null);
   	}
    
}
Output
Test.java:12: error: reference to foo is ambiguous
   		new Test().foo(null);
   		           ^
  both method foo(String) in Test and method foo(StringBuffer) in Test match

Este código resulta em um erro de compilação porque ambos os métodos foo têm o mesmo nome e a chamada para o método foo em main está passando null. O compilador não sabe qual método chamar. Você também pode se referir ao erro o método X é ambíguo para o tipo Y.


String s1 = new String("abc");
String s2 = new String("abc");
System.out.println(s1 == s2);
Output
false

O resultado é `false` porque o código usa o operador `new` para criar o objeto `String`, então ele é criado na memória heap e `s1` e `s2` terão uma referência diferente. Se você criar as strings usando apenas aspas duplas, elas estarão no pool de strings e imprimirá `true`.


String s1 = "abc";
StringBuffer s2 = new StringBuffer(s1);
System.out.println(s1.equals(s2));
Output
false

O resultado é `false` porque `s2` não é do tipo `String`. A implementação do método equals() na classe String utiliza o operador instanceof para verificar se o tipo do objeto passado é String e retorna falso se o objeto não for do tipo String.


String s1 = "abc";
String s2 = new String("abc");
s2.intern();
System.out.println(s1 == s2);
Output
false

O resultado é `false`. O método intern() retorna a referência do objeto String do pool de strings. No entanto, o código não o atribui de volta a s2, e não há alteração em s2, então s1 e s2 têm uma referência de objeto diferente. Se você alterar o código na linha 3 para s2 = s2.intern();, então a saída será `true`.

Quantos objetos String são criados pelo código a seguir?

String s1 = new String("Hello");  
String s2 = new String("Hello");
Answer

A resposta é três. O código na linha 1 cria um objeto String com o valor Hello no pool de strings (primeiro objeto) e então cria um novo objeto String com o valor Hello na memória heap (segundo objeto). O código na linha 2 cria um novo objeto String com valor Hello na memória heap (terceiro objeto) e reutiliza a string Hello do pool de strings.

Conclusão

Neste artigo, você revisou algumas perguntas de entrevista em Java especificamente sobre String.

Leitura recomendada:

Perguntas de Programação Java
Programas de String em Java

Source:
https://www.digitalocean.com/community/tutorials/java-string-interview-questions-and-answers