Java中为什么查询空字符串跟判断是否为null的时候可以不用equals?
大家讲道理
大家讲道理 2017-04-17 17:51:37
0
8
519

if(id!=null&&id!="")
代码中经常这样写,空字符串跟null 都不用equals吗?

大家讲道理
大家讲道理

光阴似箭催人老,日月如移越少年。

répondre à tous(8)
小葫芦

Tout d'abord, votre façon d'écrire id!="" est fausse. Vous devriez l'écrire comme !id.equals("").
Deuxièmement, vous devez comprendre la signification de == et equals

  1. == signifie que les deux objets sont des références au même objet ==null signifie que cet objet n'est une référence à aucun objet instance et que l'objet est vide.

  2. equals est une méthode de la classe String, indiquant que le contenu des deux chaînes est le même.

刘奇

C’est écrit comme ça tout le temps. Je me demande pourquoi ?

刘奇

Les chaînes vides nécessitent en fait des valeurs égales, sinon une erreur se produira. null peut être utilisé !=

Peter_Zhu

Le code suivant, le résultat est faux

String d = new String("");
System.out.println(""==d);

Donc, des égaux doivent être utilisés pour déterminer la chaîne vide, comme

public static boolean isEmpty(String str) {
    return (str == null || "".equals(str));
}

Ou utilisez la longueur pour déterminer et étendre n'importe quelle CharSequence, telle que

public static boolean isEmpty(final CharSequence cs) {
    return cs == null || cs.length() == 0;
}
Ty80

1. La méthode equals() existe dans la classe Object Toutes les classes d'emballage telles que Integer, Long, etc. ont réimplémenté cette fonction si vous écrivez vous-même une classe et l'utilisez. la méthode class equals(), l'effet de cette méthode est équivalent à "==", elle déterminera si les références d'objet des deux classes sont les mêmes, et dans la classe wrapper equals déterminera si le contenu du les objets sont égaux.
2. Si le jugement est écrit comme if(id.equals("")&&id!=null), il y aura un problème NullPoint. Si la valeur de id est nulle, une exception sera levée si vous supprimez l'appel à la méthode equals().

3.

Expliquez le programme ci-dessusstr1 == str2Ce qui compare, c'est si les deux références sont identiques. La chaîne que nous déclarons sera stockée dans le pool de constantes de chaîne Lorsque str1, abc sera mis dans le pool de constantes.str3 vérifiera d'abord s'il y a une chaîne abc dans le pool de constantes. Si c'est le cas, elle sera référencée directement. Étant donné que str2 crée directement un nouvel objet, l'adresse doit être différente de str1. Alors pourquoi est-ce la même chose après avoir utilisé la méthode intern ?
Lorsque la méthode intern est appelée, si le pool contient déjà une chaîne égale à cet objet String, la chaîne du pool sera alors renvoyée. temps, il ne générera pas de nouvelles chaînes. Étant donné que la chaîne du pool de constantes est toujours référencée, la valeur de retour de str2.intern() == str1 est toujours true.

C'est tout. (•'◡'gree)

左手右手慢动作

id==null signifie que l'identifiant de référence ne pointe vers aucun objet, c'est juste une référence ; seuls des objets spécifiques en Java peuvent appeler des méthodes (voici equals()). Alors appelez id==null quand equals() lancera NullPointerException.

Peter_Zhu

Ce code est mal écrit. Il n'utilise pas d'égaux pour comparer les chaînes vides, et il existe de nombreuses chaînes vides, telles que tabulation, retour chariot, etc. Il n'y a pas de vérification prête à l'emploi. utilisés, comme StingUtils dans Apache Commons. La méthode .isBlank et la méthode Strings.isNullOrEmpty de Guava peuvent toutes deux déterminer l'état des chaînes nulles et vides.

Peter_Zhu

Vous devez toujours comprendre la différence entre == et égal, la différence entre "" et null
== est de comparer si la valeur est égale ou si l'adresse du type de référence est égale. >equals consiste à comparer la valeur de l'adresse de type référence, c'est-à-dire le contenu Sont-ils égaux
.

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal