java 基础类型封装

java 基础类型封装java 怎么判断 integer 是否为空 发布时间 2023 02 24 16 24 29 来源 亿速云 阅读 357 作者 iii 栏目 开发技术 这篇文章主要介绍 java 怎么判断 integer 是否为空 在日常操作中 相信很多人在 java 怎么判断 integer 是否为空问题上存在疑惑 小编查阅了各式资料 整理出简单好用的操作方法

大家好,我是讯享网,很高兴认识大家。



java怎么判断integer是否为空

发布时间:2023-02-24 16:24:29 来源:亿速云 阅读:357 作者:iii 栏目:开发技术

这篇文章主要介绍“java怎么判断integer是否为空”,在日常操作中,相信很多人在java怎么判断integer是否为空问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”java怎么判断integer是否为空”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

注意表达式的返回值

我们在使用JDK库的时候,一定要注意认真的读一下JDK中方法的含义和它的返回值。

有些返回值可能表示这个操作是否成功,有的返回值可能是方法操作的结果。我们看两个常见的例子:

public void deleteFileWrong(){         File file= new File("/tmp/www.flydean.com.txt");         file.delete();         System.out.println("File delete success!");     }     public void deleteFileRight(){         File file= new File("/tmp/www.flydean.com.txt");         if(file.delete()){             System.out.println("File delete success!");         }     }
讯享网

先看一个文件删除的例子,delete方法是有返回值的,所以我们在调用delete方法之后,一定要判断一下返回值,看是否删除成功。

再看一个常见的String中字符替换的例子:

讯享网public void stringReplaceWrong(){         String url="www.flydean.com";         url.replace("www","WWW");         System.out.println("replaced url..."+url);     }     public void stringReplaceRight(){         String url="www.flydean.com";         url=url.replace("www","WWW");         System.out.println("replaced url..."+url);     }

我们要记住,String是不可变的,所以它的replace方法,会返回一个替换过后的String,但是原String是不变的,所以我们需要将返回值重新赋值。

注意避免NullPointerException

NullPointerException应该是最最常见的运行时异常了。怎么避免这个异常呢?

我们要做的就是在调用object的方法时候,一定要判断这个object是不是为空。

在JDK8之后,我们引入了Stream操作:

public void streamWrong(Collection<Object> collection){         collection.stream().filter(obj->obj.equals("www.flydean.com"));     }

Stream操作的过程中,我们需要注意stream中的元素是否为空。

有时候,我们可能觉得已经判断是为空了,但是条件判断不准确,导致未知的异常,看下面这个例子:

讯享网public int countWrong(Collection<Object> collection, Object object){         int count=0;         if(collection ==null){             return count;         }         for(Object element: collection){             if((element ==null && object== null)                 || element.equals(object)){                 count++;             }         }         return count;     }

这个例子是用来查找collection中到底有多少元素和object相同,如果两者都为空,也记为相同。

但是上面的例子有一个漏洞,它没有考虑element ==null 而 object !=null的情况,所以会导致NullPointerException的生成。

我们需要这样修改:

public int countRight(Collection<Object> collection, Object object){         int count=0;         if(collection ==null){             return count;         }         for(Object element: collection){             if((element ==null && object== null)                     || (element !=null && element.equals(object))){                 count++;             }         }         return count;     }

数组相等的判断

如果我们需要比较两个数组是否相等,其实我们想比较的是两个数组中的元素是否相等。

我们知道数组是一个特殊的Object,那么数组对象也有一个equals方法,考虑下面的例子:

java 基础类型封装

public boolean compareWrong(){         int[] array1 = new int[10];         int[] array2 = new int[10];         return array1.equals(array2);     }

返回的结果是false,因为数组直接使用了Object中定义的equals方法,我们看下该方法的定义:

public boolean equals(Object obj) {         return (this == obj);     }

可以看到,该方法比较的是两个地址是否相等。所以我们的到了false结果。

其实,我们可以使用Arrays.equals工具类中的方法来进行两个数组的比较:

Boolean boolA=true;         Boolean boolB=true;         System.out.println(boolA==boolB);

基础类型的封装类间的比较

在java中,我们知道有一些基础类型像boolean, byte,char, short, int他们会有相对应的封装类型:Boolean,Byte,Character,Short,Integer等。

我们可以直接将基础类型的值赋值给封装类型,封装类型会自行进行转换。

考虑下面的例子:

Boolean boolA=true;         Boolean boolB=true;         System.out.println(boolA==boolB);

结果是多少呢?

答案是true。为什么两个不同对象的比较会是true呢?

在回答这个问题之前,我们看一下字符串的比较:

String stringA="www.flydean.com";         String stringB="www.flydean.com";         System.out.println(stringA==stringB);

这个我们大家应该都知道,因为String有一个字符串常量池,直接从字符串常量构建的String对象,其实是同一个对象。

同样的对于Boolean和Byte来说,如果直接从基础类值构建的话,也是同一个对象。

而对于Character来说,如果值的范围在u0000 to u007f,则属于同一个对象,如果超出了这个范围,则是不同的对象。

对于Integer和Short来说,如果值的范围在-128 and 127,则属于同一个对象,如果超出了这个范围,则是不同的对象。

再考虑下面的例子:

Boolean boolA=true; Boolean boolC=new Boolean(true); System.out.println(boolA==boolC);

输出的结果是false,因为boolC使用了new关键字,构建了一个新的对象。

集合中类型不匹配

现在java集合可以通过指定类型,从而只存储特定类型的对象。考虑下面的一个例子:

public void typeMismatch(){         HashSet<Short> shortSet= new HashSet<>();         for(int i=0;i<10;i++){             shortSet.add((short)i);             shortSet.remove(i);         }         System.out.println(shortSet.size());     }

上面代码我们定义了一个Short的集合,然后将0-9添加进去,接着我们又调用了remove方法把i从集合删除。

但是最后输出结果是10,表明我们并没有删除成功。为什么呢?

看下HashSet的remove方法:

public boolean remove(Object o) {         return map.remove(o)==PRESENT;     }

remove方法的参数是Object,我们传入的i是int类型的,跟short不匹配,所以导致删除失败。

我们需要这样修改:

public void typeMatch(){         HashSet<Short> shortSet= new HashSet<>();         for(int i=0;i<10;i++){             shortSet.add((short)i);             shortSet.remove((short)i);         }         System.out.println(shortSet.size());     }

Asset的副作用

我们会使用Asset语句在代码中做调试使用,在使用的过程中需要注意Asset语句不要对系统的业务逻辑产生副作用,也就是说即使Asset语句不运行,也不会修改代码的业务逻辑。

看下面的例子:

public void assetWrong(ArrayList<Integer> list){         assert  list.remove(0)>0;     }

上的代码我们从list中删除第一个元素,并判断删除的元素是否大于0.

上面的代码如果assert语句不执行的话,会导致业务逻辑也不执行,所以需要修改成下面这样:

public void assetRight(ArrayList<Integer> list){         int result=list.remove(0);         assert  result>0;     }

补充:java中判断变量非空

1.当判断的变量为数值型时(integer)

先判断是否为空 在判是否为零

if (id != null && id != 0) {    return false;//不为空           }

2.当判断的变量为字符串时时(String)

Strings.isNotBlank(name){     return false;//不为空 }

3.当判断的变量为对象时(people)

!Objects.isNull(easyData){     return false;//不为空 }

4.当判断的变量为集合时(Lsit)

CollectionUtils.isEmpty(list){     return true;//为空 } Integer id = 0; String name = null; public class People { } List<Object> list = new ArrayList<>();
小讯
上一篇 2024-12-26 23:30
下一篇 2024-12-29 13:41

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/6048.html