String类型判断

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了String类型判断相关的知识,希望对你有一定的参考价值。

1.String str1 = "123";
if("123".equals(str1))和if(str1=="123")的区别..

2.String str1 ="";
if(null==str1 || "".equals(str1) || "null".equals(str1) )和if("".equals(str1))的区别..

望大家能给予通俗点的解答,便于理解..谢谢!!!
我只想说..我不是菜鸟....这行我已经进入了2年了.. 只是这问题. 我无法用语言去表达... 望大家帮助....谢谢....
3楼..你可以测试下...
第一个问题.. 2个判断都是返回的true.. 我想了解..为什么大家都会使用前者?的确是地址不同. 一个保存在堆中.. 一个在栈中... 但是我想了解要选择第一种判断..
第二个问题...疑点在于str1可能等于null或者"null"吗? 而我声明的是"",,那我只需要判断"".equals(str1)就可以了啊....

继续等待大家的答案.. 谢谢

首先楼主肯定知道"=="和equals的区别,我这里再说下:
==比的是两个对象的地址。
equals是java.lang.Object类的一个方法,默认跟"=="一样也是比的地址。如果判断对象相等有其他的标准(例如只要值相等就代表相等),那么就需要重写java.lang.Object的equals方法。String类就重写了此方法,只要对象值相等即可。

Java运行时会维护一个String Pool(String池),String Pool与JAVA堆栈是各自独立的。

String池用来存放运行时中产生的各种字符串,并且池中的字符串的内容不重复。
String对象的创建遵循以下几个原则。
原则1:只要使用new关键字来创建对象(String str = new String("123")),则一定会(在堆区或栈区)创建一个新的对象。 我们知道,只要一个对象是New出来的,那JVM肯定会在内存中为此对象分配一个唯一的地址,因此New出的对象跟任意一个对象用“==”判断肯定为false。
原则2:使用直接指定来创建String对象(如String str="123"),则仅仅会检查维护String池中的字符串,池中没有就在池中创建一个,有则罢了!但绝不会在堆栈区再去创建该String对象。
原则3:使用包含变量的表达式来创建对象String(String str = "123"+"456"),则不仅会检查维护String池,而且还会在堆栈区创建一个String对象。

说完这些,我们来看下你的问题:
1、String str1 = "123";
if("123".equals(str1))和if(str1=="123")的区别..
例子中str1对象是按照原则2创建的,所以地址会相同。
如果String str1 = new String("123"),那么str1按照原则1创建,equals判断为true,==判断为false.

2.String str1 ="";
if(null==str1 || "".equals(str1) || "null".equals(str1) )和if("".equals(str1))的区别 .....而我声明的是"",,那我只需要判断"".equals(str1)就可以了啊....

此问题你提的有点问题, if(null==str1 || "".equals(str1) || "null".equals(str1) )我觉得这条语句可能用来判断数据库查询的结果是否为空,它认为null或空字符串或字符串"null"都代表空,而if("".equals(str1))只有在str1=""的时候才成立。
参考技术A 1.String str1 = "123";
if("123".equals(str1))和if(str1=="123")的区别..

首先,String是一个类,123只是这个类中的一个值
equals用来比较两个String类中的值是否相同,= "123"是快捷的建了一个新类,和new String("123")一样(这样说比较通俗)
所以,if("123".equals(str1))就是通过(在比较值),str1 == "123"就不能通过了。因为"123"又是一个新类了。

2.String str1 ="";
if(null==str1 || "".equals(str1) || "null".equals(str1) )和if("".equals(str1))
null == str1不通过。因为str1是空值的一个类, "".equals(str1)通过, "null".equals(str1)不通过。因为"null"值不等于"", 因为是||(或)判断,所以这名是通过的。
if("".equals(str1))是通过的。因为你前面建str1类的时候,初始值是""空。

应该看得懂吧?兄弟加油

参考资料:my head

参考技术B 例1例2 输出都是true;

我想了解..为什么大家都会使用前者?
我想大概equals 比较的是对象的内容,而且在自己的新类中可以覆盖equals()方法.用起来方便。

第二个问题...疑点在于str1可能等于null或者"null"吗?

String str1 =""; 你已经申明str1 是一个字符串,虽然什么都不显示.
一旦申明了,那么str1 就不可能是 null ,更不等于"null"这个新字符串!
参考技术C 学编程不是靠做几个习题就可掌握,要实际编写和调试 参考技术D 第一个问题 (1)是123等于str1,(2)吧123赋值给str1.
第二个问题 哥们我也看不懂,哈哈。

Java判断String类型变量是否可以转换数字类型

正则表达式

首先要import java.util.regex.Pattern 和 java.util.regex.Matcher

public boolean isNumeric(String str)
           Pattern pattern = Pattern.compile("[0-9]*");
           Matcher isNum = pattern.matcher(str);
           if( !isNum.matches() )
               return false;
           
           return true;
    

JAVA自带函数

public static boolean isNumeric(String str)

  for (int i = 0; i < str.length(); i++)
    
    System.out.println(str.charAt(i));
    if (!Character.isDigit(str.charAt(i)))
    
        return false;
      
  
  return true;

用org.apache.commons.lang

org.apache.commons.lang.StringUtils;

boolean isNunicodeDigits=StringUtils.isNumeric("aaa123456789");

判断ASCII码值

public static boolean isNumeric0(String str)
  
  for(int i=str.length();--i>=0;)
  
     int chr=str.charAt(i);
     if(chr<48 || chr>57)
        return false;
  
  return true;
 

逐个判断str中的字符是否是0-9

public static boolean isNumeric3(String str)

  final String number = "0123456789";
  for(int i = 0;i < number.length; i ++)
  
   if(number.indexOf(str.charAt(i)) == -1)
       
        return false;  
       
    
  return true;

捕获NumberFormatException异常

public static boolean isNumeric00(String str)

  try
     Integer.parseInt(str);
     return true;
  catch(NumberFormatException e)
  
   System.out.println("异常:\\"" + str + "\\"不是数字/整数...");
   return false;
  

以上是关于String类型判断的主要内容,如果未能解决你的问题,请参考以下文章

java 判断int类型为空

js类型判断

java中如何判断输入的数据类型

JS判断类型

Java判断String类型变量是否可以转换数字类型

java 判断数据类型和方法的参数类型相同