null和""以及==与equals的区别——最全面的解答
Author:[email protected] Date:
一般我们都知道:
1、==一般用来比较数字类型的
2、equals用来比较字符串的
3、==一般不用来比较字符串,因为就算字串内容相同,但是地址是不一样的,所以==比较字符串存在风险
但是,具体,为什么?…………那是because:
==是判断两个变量或实例是不是指向同一个内存空间;
equals是判断判断两个变量或实例所指向的内存空间的值是不是相同。最初始的equals也是对比内存空间是否一致,而经过覆盖重写后的equals只对比内容是否相同。
s1="a"; s2="a"; 则s1==s2为true;
s1=new String ("a"); s2=new String ("a"); 则s1==s2为false;
String str1 = null; str引用为空
String str2 = ""; str引用为空串
直接点就是null没有分配内存空间,而""分配了内存空间,因此str1还不是一个实例化的对象,而str2已经实例化。
注意因为null不是对象,""是对象。所以比较的时候必须是 if(str1==null){....}和if(str2.equals("")){....}
内存地址比较用equals,null用等号比较。
因此,如果str1=null;下面的写法错误:
if(str1.equals("")||str1==null){
//如果str1没有值,则返回false
}
正确的写法是 if(str1==null||str1.equals("")){
//先判断是不是对象,如果是,再判断是不是空字符串
}
//==与EQUEAL得区别如下:
//如下面的代码,运行过后,返回为false;
public static void main(String[] ab){
String a = new String("123");
String b = new String("123");
System.out.println(a==b);
}
//这是因为==比较的是两个引用时是不是指向同一个内存地址,而equeals比较的是字面值。上面的new就产生了两个不同的对象,那么其内存地址肯定也就不同了。
public static void main(String[] ab){
String a = new String("123");
String b = new String("123");
System.out.println(a.equals(b));
}//返回为true
if(a.equals("abc"))
和
if("abc".equals(a))
有什么区别?
当 a 为null时,a.equals("abc")会抛出异常,而后者不会。。。
转载本站文章《null和""以及==与equals的区别——最全面的解答》,
请注明出处:https://www.zhoulujun.cn/html/java/javaBase/7705.html
延伸阅读:
- Chrome的控制台:Console标签调试代码的函数分析
- 再谈Java数据结构—分析底层实现与应用注意事项
- 完整java开发中JDBC连接数据库代码和步骤
- 浏览器把JSON导出转为excel下载到本地
- 26进制转换:转换函数将数字转成对应的大写字母——toString
- 排毒,可以休矣(人体排毒时间表的骗局
- 性交大法大盘点—细说性交的各种JJYY
- 再唠叨JS模块化加载之CommonJS、AMD、CMD、ES6
- 这些怪异的做爱方式-男男女女都喜欢
- 闲谈古代中国夫妻间做爱的姿势与手法—古法高潮大戏
- 搬新办公室防毒面罩选择—选择合适的口罩应对搬家搬办公
- 中医为什么现今还大行其道?各种传统医学的兴衰更替-医史
- 再谈鱼腥草毒性—马兜铃内酰胺
- 控诉果糖的危害—从人体生化代谢透析为什么果糖是毒药
- 分析做血常规的必要性和抽血的对身体的伤害
- 高尿酸痛风患者的日常保健与用药选择—果糖的危害
- Java方法重载
- JavaBean的详细及引用
- Java类的运行顺序与Java加载机制