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

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相等,再调用再判断其内容是否相等 如果内容也相等那这两个对象相等,如果内容不相等,这两个对象也是不相等的

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值