O valor nulo ou nulo da string é julgado
Durante o processo de desenvolvimento, muitas vezes encontro os seguintes usos errados:
1. Uso do erro 1:
if (nome == "") {// faça algo} 2. Uso do erro 2:
if (name.equals ("")) {// faça algo}
3. Uso do erro três:
if (! name.equals ("")) {// faça algo}
Vamos explicar:
O uso de erro acima 1 é o erro mais provável que os iniciantes cometem e são os menos propensos a serem descobertos, porque sua sintaxe em si é boa e o compilador Java não relata um erro ao compilar. No entanto, essa condição pode causar um bug no programa durante o tempo de execução e nunca será verdadeiro. Em outras palavras, as declarações no bloco IF nunca serão executadas.
O uso acima mencionado 2 e o uso 3 são escritos, incluindo erros que muitos provicientes de Java também são fáceis de cometer. Por que está errado? Talvez você fique intrigado.
Sim, a escrita deles está correta, mas há a falta de uma condição de julgamento nula. Imagine, o que acontecerá se o nome = nulo? A conseqüência é que seu programa lançará uma exceção do NullPointerException, o sistema será suspenso e não fornecerá mais serviços normais.
Obviamente, se você já fez um julgamento nulo sobre o nome antes, a exceção é.
A maneira correta de escrevê -lo deve primeiro adicionar a condição de nome! = NULL, como:
if (nome! = null &&! name.equals ("")) {// faça algo}ou
if (! "". Equals (nome)) {// write "" na frente dele, para que, independentemente de o nome ser nulo ou não, não haverá erro. // Faça algo}
Aqui, vamos dar um exemplo simples:
TestNullorEmpty.java
classe pública teste {public static void main (string args []) {string value = null; testNullorEmpty (valor); value = ""; testNullorEmpty (valor); value = ""; testNullorEmpty (valor); value = "olá me"; testNullorEmpty (valor); } estático void testNullorEmpty (String value) {if (value == null) {System.out.println ("valor é nulo"); } else if ("" .equals (value)) {System.out.println ("O valor está em branco, mas não nulo"); } else {System.out.println ("valor é /" "" + value + " /" "); } if (value == "") {// subscrição de ng // não use esta escrita}}} Compilar execução:
c:/> javac testnullorEmpty.javac:/> java testnullorEmpty
O valor é nulo. O valor está em branco, mas não nulo.
Compare endereços de string iguais
pacote com; public class A { / ** * @param args * / public static void main (string [] args) {string a = "hello"; String b = "ele"; String c = a.substring (0, 2); System.out.println (B.Equals (c)); // true system.out.println (b == c); // false string d = new string ("hello"); System.out.println (d.equals (a)); // true system.out.println (d == a); // false string e = new stringbuilder ("hello"). Tostring (); System.out.println (equals (a)); // true system.out.println (e == a); // false system.out.println (equals (d)); // true system.out.println (e == d); // false s = "hello"; System.out.println (f.Equals (a)); // true system.out.println (f == a); // true system.out.println (f == "hello"); // true system.out.println (f == "hell"+"o"); // verdadeiro string g = b+"llO"; System.out.println (g == f); // string false h = "he"+"llO"; System.out.println (h == f); // true}}Resumir:
1. A string de New é re-alocar a memória, as strings não são compartilhadas e várias novas não são compartilhadas.
2. As cordas e variáveis de cordas estáticas que são emendas ou interceptadas não são compartilhadas por meio de funções de string.
3. Existem duas situações para strings obtidas por placas mais sinais.
A "He"+"LLO" é uma corda estática, que é compartilhada
B string a = "ele"; a+"llO" não é uma corda estática, não é compartilhada