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是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类型判断的主要内容,如果未能解决你的问题,请参考以下文章