Maison >Java >javaDidacticiel >Une brève analyse du problème consistant à déterminer si une chaîne String est vide en Java
1. Les méthodes pour déterminer si une chaîne str est vide sont :
1. str == null ".equals(str); length <= 0;
4. str.isEmpty();
Remarque : la longueur est un attribut. Généralement, il s'agit d'un attribut appartenant aux objets de classe de collection pour obtenir la taille de la collection.
Par exemple : array.length doit obtenir la longueur du tableau.
length() est une méthode. Généralement, les objets de classe chaîne ont cette méthode, qui obtient également la longueur de la chaîne.
Par exemple : string.length();
Explication :
1. null signifie que cette chaîne ne pointe vers rien. Si vous appelez sa méthode à ce moment, une exception de pointeur nul se produira.
2. "" signifie qu'il pointe vers une chaîne d'une longueur de 0, et il est sûr d'appeler sa méthode à ce moment-là.
3. Null n'est pas un objet, "" est un objet, donc null n'alloue pas d'espace, "" alloue de l'espace, par exemple :
String str1 = null la référence str est vide
String str2 = ""; str fait référence à une chaîne vide
str1 n'est pas encore un objet instancié, mais str2 a déjà été instancié.
Les objets sont comparés en utilisant des égaux et null est comparé en utilisant le signe égal.
Si str1=null ; l'écriture suivante est fausse :
if(str1.equals("")||str1==null){ }
L'écriture correcte est if(str1==null|| str1 .equals("")){ //Ainsi, lorsque vous jugez si une chaîne est vide, jugez d'abord s'il s'agit d'un objet, et si c'est le cas, jugez ensuite s'il s'agit d'une chaîne vide}
4. Par conséquent, jugez si une chaîne est vide, assurez-vous d’abord qu’elle n’est pas nulle, puis déterminez sa longueur.
String str = xxx;
if(str != null && str.length() != 0) { }
2. Voici quatre façons de déterminer si une chaîne est vide dans Java :
L'efficacité d'exécution des quatre méthodes est la suivante :
JudgeString1 prend 625 ms
JudgeString2 prend 125 msJudgeString3 prend 234 ms
JudgeString4 prend : 109 ms
/** * Created with IntelliJ IDEA. * User: Administrator * Date: 14-1-16 * Time: 上午10:43 * 判断字符串是否为空的效率问题 */ public class JudgeStringIsEmptyOrNot { public static void main(String[] args) { JudgeString1("w_basketboy", 10000); JudgeString2("w_basketboy", 10000); JudgeString3("w_basketboy", 10000); JudgeString4("w_basketboy", 10000); } /** * 方法一: 最多人使用的一个方法, 直观, 方便, 但效率很低; * 方法二: 比较字符串长度, 效率高, 是最好的一个方法; * 方法三: Java SE 6.0 才开始提供的方法, 效率和方法二几乎相等, 但出于兼容性考虑, 推荐使用方法二; * 方法四: 这是一种比较直观,简便的方法,而且效率也非常的高,与方法二、三的效率差不多; */ public static void JudgeString1(String str, long num) { long startTiem = System.currentTimeMillis(); for (int i = 0; i < num; i++) { for (int j = 0; j < num; j++) { if (str == null || "".equals(str)) { } } } long endTime = System.currentTimeMillis(); System.out.println("function1耗时:" + (endTime - startTiem) + "ms"); } public static void JudgeString2(String str, long num) { long startTiem = System.currentTimeMillis(); for (int i = 0; i < num; i++) { for (int j = 0; j < num; j++) { if (str == null || str.length() <= 0) { } } } long endTime = System.currentTimeMillis(); System.out.println("function4耗时:" + (endTime - startTiem) + "ms"); } public static void JudgeString3(String str, long num) { long startTiem = System.currentTimeMillis(); for (int i = 0; i < num; i++) { for (int j = 0; j < num; j++) { if (str == null || str.isEmpty()) { } } } long endTime = System.currentTimeMillis(); System.out.println("function3耗时:" + (endTime - startTiem) + "ms"); } public static void JudgeString4(String str, long num) { long startTiem = System.currentTimeMillis(); for (int i = 0; i < num; i++) { for (int j = 0; j < num; j++) { if (str == null || str == "") { } } } long endTime = System.currentTimeMillis(); System.out.println("function4耗时:" + (endTime - startTiem) + "ms"); } }