这个问题困恼我很久了 实在是不可理解String str;
if(str.equals(null))
System.out.println("XXXXXXX");
就这样的代码str值如果传入不为null时 能打印XXXXX信息,可是如果str = null 时,
if(str.equals(null)) 这行运行就会报错
我记得以前用equals一直都没出现过这样的问题 难道是我记错了,我以前从来没用过这样的方法???
不可能啊
我也知道如果str为null时其实相当与null.equals(null) 这样是会报错
可是如果if(str.equals(null)) 在str = null 时 也报错 那不意味着equals无法使用了??忘大牛们给我解惑 或许 真的是我哪里糊涂了
if(str.equals(null))
System.out.println("XXXXXXX");
就这样的代码str值如果传入不为null时 能打印XXXXX信息,可是如果str = null 时,
if(str.equals(null)) 这行运行就会报错
我记得以前用equals一直都没出现过这样的问题 难道是我记错了,我以前从来没用过这样的方法???
不可能啊
我也知道如果str为null时其实相当与null.equals(null) 这样是会报错
可是如果if(str.equals(null)) 在str = null 时 也报错 那不意味着equals无法使用了??忘大牛们给我解惑 或许 真的是我哪里糊涂了
System.out.println("***");
}
这样也行把! 我被你一搞也混了!
这是刚从API中查到的!!!
对呀,为什么会糊涂呀?
如果str=null的时候,str为null,null是没有任何方法的,也就是说调用任何的方法肯定会抛出空异常的。
想一下 不管是什么对象 只要用了equals,我也不看右边等于什么, 一旦左边那个对象为null 那么程序不就要报错了??
那么这样的话equals这个方法还有人敢用么???
我以前也是用equals判断 好像没出过这样的问题啊 很是纳闷啊
先判断一下 不就行了 吗 ?
if(str == null)
{
return;
}if(str.equals(null))
System.out.println("XXXXXXX");
PS:我感觉5楼说得挺对的。我是新手,请各位高手指正!!
用equals的时候是""比较 str.equals("")
明白了吧
说白了只要用到equal的,左边存在对象值不确定情况下难道都要先
if(XXX == null) 再使用if(XXX.equals(XXXX)) 么???
if(str.equals(null))
System.out.println("XXXXXXX"); 开始没有赋值,实际为null,null没有equals方法,应该抛出nullpointexception;如果初始化值,"abc".equals(null)ok不过这里也有个逻辑问题,SDK如是说:
public boolean String.equals(Object anObject),这里null可以传入,是不是说null也算Object呢.....然而class.forname("null")木有,null.xxx也木有。
不知如何园法。
if(ObjectA.equals(ObjectB))一旦ObjectA为null 就会报异常了
如果真要用:
if(ObjectA !null)
if(ObjectA.equals(ObjectB))
这样的话,那这样不是很麻烦 那为什么equals方法不从新改写下再去使用的好
楼主肯定忘记了,以前你是这样写代码的:
if(str==null || str.equals(null))
System.out.println("XXXXXXX");
我不是问为什么null。equals(xxx)会报错这个问题哦
呵呵 我以前应该是这样写的:
if(XXX.euqals(null) || XXX.equals(""))
之所以以前没遇见报错的情况那是因为XXX不是null,现在真好被我遇见了 我才考虑到了这个问题
结果会输出:null不属于java.lang.Object类型 参考资料:http://tieba.baidu.com/f?kz=510289524
if(str==null||str.equals(""))
System.out.println("XXXXXXX");
System.out.println("XXXXXXX"); 一般是这么写的。楼主觉得恶心可以自己封装一个工具类。
ps. 这个确实有点e
System.out.println("XXXXXXX");
if(str==null) 与 if(str=="")
str==null str=="" // 是两个不一样的吧
一个是null空值,一个是空字符串
学习学习
==比较的是地址
equals比较的是值
/**
* 判断String对象不是空
* @param s 需要判断的字符串对象
* @return 如果不是空就返回true,否则返回false
*/
public static boolean isNotEmpty(String s){
return s!=null&&s.length()>0;
}这才是比较好的写法。到java7的时候就用?直接比较了。
先定义一个类型 String str
然后再
String str;
if(str.equals(null))
System.out.println("XXXXXXX"); 开始没有赋值,实际为null,null没有equals方法,应该抛出nullpointexception;如果初始化值,"abc".equals(null)ok 不过这里也有个逻辑问题,SDK如是说:
public boolean String.equals(Object anObject),这里null可以传入,是不是说null也算Object呢.....然而class.forname("null")没有,null.xxx也没有。 如果str为null时其实相当与null.equals(null) 这样是会报错
如果str=null的时候,str为null,null是没有任何方法的,也就是说调用任何的方法肯定会抛出空异常的
if(str.equals(null))
System.out.println("XXXXXXX");
这样应该没办法通过编译呀。
public static void main(String[] args){
String str ="null";
if(str.equals("null"))
System.out.println("XXXXXXX");
}
以上才是能运行的代码。原因是由于equals这个方法后面应该加一个object(也就是对象),你和null比较是不行的,因为null是没有对象,这就相当于你把str.equals(null)当做str.equals(),而str.equals()是没有这个方法的,会返回nullpointerexception异常
if(str.equals(null))
System.out.println("XXXXXXX"); String str; 在程序中如果没有指定值的话,那要写在方法体外面,因为只有方法体外面的成员变量没有赋值的时候会给个初始值,jvm给String值的时候是null,并没有创建String对象,也就是没有实例化对象,
这样怎么能使用没有实例化对象的方法呢!结果肯定是出现npe异常
if(null == str && "".equals(str)){
又不考认证 这样判断 就OL , 管你传什么值
}
楼主是这样说的,这个没错,如果str = null 时equals是绝对无法使用的。
可以用StringUtils.equals(str1, str2);这样即使两个都是Null也能判断
==,||,&&是运算符,不是方法,只是一个判断的运算,而没有发起的主体,所以null==null是可以的。
我估计你是把方法和运算符搞混了吧
/**
* Compares this string to the specified object.
* The result is <code>true</code> if and only if the argument is not
* <code>null</code> and is a <code>String</code> object that represents
* the same sequence of characters as this object.
*
* @param anObject the object to compare this <code>String</code>
* against.
* @return <code>true</code> if the <code>String </code>are equal;
* <code>false</code> otherwise.
* @see java.lang.String#compareTo(java.lang.String)
* @see java.lang.String#equalsIgnoreCase(java.lang.String)
*/
public boolean equals(Object anObject) {
if (this == anObject) {
return true;
}
if (anObject instanceof String) {
String anotherString = (String)anObject;
int n = count;
if (n == anotherString.count) {
char v1[] = value;
char v2[] = anotherString.value;
int i = offset;
int j = anotherString.offset;
while (n-- != 0) {
if (v1[i++] != v2[j++])
return false;
}
return true;
}
}
return false;
}
所以在调用equals方法的时候一般使用:"xxxx".equals(str),或者 str != null && str.equals("xxx") 用来避免null的问题
还有 我写
String str;
if(str.equals(null))
System.out.println("XXXXXXX"); 这样的并不表示代码说str没赋值,我这样写只是为了说明我要说的问题啊
好像就33 和34楼的理解了我要说的了 我并不是要讨论equals跟 = 的区别 我也不是要讨论null的的用法 我讨论的是:
但凡一个未知的对象使用equals方法,那么必须要先判断是否为空否则直接使用equals是不安全的行为
当然if(Object !=null || Object.equals(null)) 这样的方法能解决,但不觉得这样使用equals很别扭么,也就是说对象判断是否相等绝对不能单独使用equals必须先判断是否为空了
48楼的这个方法StringUtils.equals(str1, str2);没用过 , 呵呵,我去试试
可是如果if(str.equals(null)) 在str = null 时 也报错 那不意味着equals无法使用了??str = nulll,就是为str赋予了一个空引用,再调用它的方法,编译时可以通过,运行时就通不过了,当然报错
所以java7为了这个问题,为了程序员少写点null判断,引入了问号直接比较。
if (null == str || "".equals(str))
{
System.out.println("");
}
{
System.out.println("");
}
建议你去查一下API看看Object的方法
public boolean equals(Object anObject)将此字符串与指定的对象比较。当且仅当该参数不为 null,并且是与此对象表示相同字符序列的 String 对象时,结果才为 true。 覆盖:
类 Object 中的 equals
参数:
anObject - 与此 String 进行比较的对象。
返回:
如果给定对象表示的 String 与此 String 相等,则返回 true;否则返回 false。
另请参见:
compareTo(String), equalsIgnoreCase(String)
java不允许局部变量没有赋值就直接使用。
何来lz的问题。。
搞不懂lz是因为什么困惑?
这帖子也要发出来。
浪费资源!!!
我那样写只是为了说明一下问题,哎,跟你们这些不仔细看就评论的说不清楚 ....回61楼:java7有解决这个问题啊 不过你说的引用问号直接比较不明白 有时间去看看
其中yyy可为null
xxx不为null
if(str.equals(null))
System.out.println("XXXXXXX"); 一般都不这么用
应该这样
if(str.equals("")){}
if(str==null){}学习不要专牛角尖
不知道你们平时发表评论都是怎么发表的,只看一部分,然后就自以为要问什么问题了,最后出现的就是断章取义.....
很感谢33、61、48楼的大哥们 你们才清楚小弟要问题的问题是什么谢谢 48楼的大哥,StringUtils.equals(XXX,XXX)确实能解决null的问题,这样就可以避免去判断是否为null了帖子在挂1天,期望更多牛人们回答 明天结贴。
System.out.println("XXXXXXX");
这样就可以了