关与String判空和比较的一些理解

String类型是不可变的类型

如果一个类,在他创建完成之后,该对象的成员变量不能够被改变,基本数据类型的值不能改变,引用类型的变量不能指向其他对象,那就说明这个类是不可变的

举一个简单的例子:(在java中变量和引用变量是存在栈中(stack),而对象(new产生的)都是存放在堆中(heap)

String s = "abd";//先在堆中创建了一个s实例 s = s + "ef";   //又创建了一个 s 把原来的s+“ef”赋值给他 原来的s会被垃圾回收机制回收 //所以s 实际上并没有被更改
  • 正因为String 的不可更改 ,所以他需要不断的创建和回收极大的消耗内存,系统开销大

  • 所以出现了StringBuffer ,StringBuilder 主要用于字符串的了解(下一篇详细讲解)

关与String的判空

“”和null的区别

null

  • String s = null表示的是一个s的值为null,而并不是一个字符串

  • 表示声明一个字符串对象的引用,但指向为null,所以他(还)没有指向任何的内存空间

”“

  • String s = null; 表示一个空字符串,也就是说他的长度为0

  • 表示声明一个字符串类型的引用,其值是空字符串,这个 s 引用指向的是空字符串的内存空间

所以String类型的判空应该为: if(s == null || s.length() == 0); 推荐

也可以是:if(s == null || s.equals(""));不推荐,效率低

注意:s==null一定要写且要写在前面 要不然会报java.lang.NullPointerException 在他为null的情况下就没必要比较长度了

拓展

list map set集合判空

if(list != null && !list.isEmpty()){  //最佳方法 list存在且有元素  } if(list != null && list.size() == 0){  }  //剖析  list != null 同上判断是否存在这个list null表示这个list不指向任何的东西,如果你调用他会报java.lang.NullPointerException  list.isEmpty() 判断这个list集合是否存在元素  list.size()==0 判断这个list集合里有几个元素

Date类型判空

Date date = new Date(); if(date ==null){      sout("date is null"); }else{      sout("date is not null");  }

equals和 ==

先说==

  • 如果是八种基本类型之间的 == ,那比较的是他们的值是否相等

  • 如果是引用类型的比较,则判断的是他们内存地址是否相等(每次new一个新的对象会重新分配一个内存空间,地址改变)

equals

  • 判断的是内存地址是否相等

  • 可以重写equals比较其内容是否相等 重写equals时必须重写hashcode()方法

    • 存储一个元素首先会使用Hash算法生成一个int类型的hashcode散列值

    • 然后与已经存储的所有元素的hashcode相比较

    • 如果hashcode不相等,那么两个对象一定不相等

    • 如果hashcode相等,再调用再判断其内容是否相等 如果内容也相等那这两个对象相等,如果内容不相等,这两个对象也是不相等的


全部评论

相关推荐

当初高考报计算机真是造大孽了啊!卷的飞起!哪都是计算机的人,考研,考公,找工作全他奶的计算机的人,太难了。国企也是。关键一届比一届卷,造大孽了!
_Lyrics_:因为计算机,没有体验到快乐的大学研究生时光,好不容易修完课程就要出去实习,看着别人专业可以一起搓麻将,游山玩水,而我却要自己一个人住在北上不到十平米的出租屋,每天两点一线
点赞 评论 收藏
分享
04-25 18:13
五邑大学 Java
后来123321:大二两段实习太厉害了,我现在大二连面试都没有
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务