java封装类型与基础类型对比示例分析

 更新时间:2023年11月22日 10:17:26   作者:求平安  
这篇文章主要为大家介绍了java封装类型与基础类型对比示例分析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

封装类型以Long为例,基础类型以long为例

1 比较equals与==

@Test
public void testEquals() {
    Long l1 = 10000L;
    long l2 = 10000l;
    Long l3 = 10000l;
    // 封装类型与基础类型==比较的时候,封装类型会自动转成基本类型做比较
    System.out.println(l1 == l2); // true
    System.out.println(l1 == l3); // false
    System.out.println(l1.longValue() == l3.longValue()); // true
}

总结1:如果使用==号比较,需要把1侧的类型转成基础类型

2 速度equals与==哪个更快呢?

@Test
public void testFast() {
    // string的equals和long的equals,哪个更快
    int N = 1000000;
    long[] l1 = new long[N];
    long[] l2 = new long[N];
    Long[] data1 = new Long[N];
    Long[] data2 = new Long[N];
    String[] str1 = new String[N];
    String[] str2 = new String[N];
    long j = 0;
    for (int i = 0; i < N; i++) {
        data1[i] = j;
        data2[i] = j;
        str1[i] = String.valueOf(j);
        str2[i] = String.valueOf(j++);
    }
    compareL(l1, l2, N); // 10
    compareLong1(data1, data2, N); // 100
    compareLong(data1, data2, N); // 600
    // 总结:Long1.longValue()==Long2.longValue() 比 Long1.equals(Long2) 更快
    compareStr(str1, str2, N); // 1000
}
public void compareL(long[] data1, long[] data2, int N) {
    long startL = System.currentTimeMillis();
    for (int i = 0; i < 100; i++) {
        for (int j = 0; j < N; j++) {
            if (data1[j] == (data2[j])) {
            }
        }
    }
    long endL = System.currentTimeMillis();
    System.out.println("compareL tasks times :" + (endL - startL));
}
public void compareLong(Long[] data1, Long[] data2, int N) {
    long startL = System.currentTimeMillis();
    for (int i = 0; i < 100; i++) {
        for (int j = 0; j < N; j++) {
            if (data1[j].equals(data2[j])) {
            }
        }
    }
    long endL = System.currentTimeMillis();
    System.out.println("compareLong tasks times :" + (endL - startL));
}
public void compareLong1(Long[] data1, Long[] data2, int N) {
    long startL = System.currentTimeMillis();
    for (int i = 0; i < 100; i++) {
        for (int j = 0; j < N; j++) {
            if (data1[j].longValue() == data2[j].longValue()) {
            }
        }
    }
    long endL = System.currentTimeMillis();
    System.out.println("compareLong tasks times :" + (endL - startL));
}
public void compareStr(String[] data1, String[] data2, int N) {
    long startL = System.currentTimeMillis();
    for (int i = 0; i < 100; i++) {
        for (int j = 0; j < N; j++) {
            if (data1[j].equals(data2[j])) {
            }
        }
    }
    long endL = System.currentTimeMillis();
    System.out.println("compareStr tasks times :" + (endL - startL));
}

总结

通过compareLong1和compareLong对比,可以发现在保证数据正确的前提下,==比equals的速度要快。

结合总结1,我们可以在封装类型比较多时候,使用l1.longValue() == l2.longValue();

以上就是java封装类型与基础类型对比示例分析的详细内容,更多关于java封装类型基础类型对比的资料请关注脚本之家其它相关文章!

相关文章

  • SpringSecurity7.0新特性详解

    SpringSecurity7.0新特性详解

    本文主要介绍了Spring Security 7.0 新特性详解,文中通过示例代码介绍的非常详细,帮助你更好地理解和应用这些新特性,需要的朋友们下面随着小编来一起学习学习吧
    2026-04-04
  • 用Spring Native将SpringBoot程序转换为GraalVM

    用Spring Native将SpringBoot程序转换为GraalVM

    这篇文章主要介绍了用Spring Native将SpringBoot程序转换为GraalVM的方法,帮助大家更好的理解和学习使用SpringBoot,感兴趣的朋友可以了解下
    2021-04-04
  • springBoot项目中使用@Value取值出现的问题及解决

    springBoot项目中使用@Value取值出现的问题及解决

    这篇文章主要介绍了springBoot项目中使用@Value取值出现的问题及解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-07-07
  • Java中String类startsWith方法详解

    Java中String类startsWith方法详解

    这篇文章主要给大家介绍了关于Java中String类startsWith方法的相关资料,startsWith() 方法用于检测字符串是否以指定的前缀开始,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2024-05-05
  • Java使用okhttp3发送请求的实现示例

    Java使用okhttp3发送请求的实现示例

    OkHttp3是一个高效的HTTP客户端,支持HTTP/2、GZIP压缩、响应缓存和异步/同步请求,本文就来介绍一下Java使用okhttp3发送请求的实现示例,感兴趣的可以了解一下
    2025-12-12
  • java中stream的peek()用法详解

    java中stream的peek()用法详解

    这篇文章主要介绍了java中stream的peek()用法详解,peek的作用是
    改变元素的内部状态,对每个object执行 saveInfomation(object, params),然后把结果收集到一个 List 里,这里涉及到了最终操作,需要的朋友可以参考下
    2024-01-01
  • Java简单统计字符串中汉字,英文字母及数字数量的方法

    Java简单统计字符串中汉字,英文字母及数字数量的方法

    这篇文章主要介绍了Java简单统计字符串中汉字,英文字母及数字数量的方法,涉及java针对字符串的遍历、编码转换、判断等相关操作技巧,需要的朋友可以参考下
    2017-06-06
  • Mybatis中的resultType和resultMap查询操作实例详解

    Mybatis中的resultType和resultMap查询操作实例详解

    resultType是直接表示返回类型的,而resultMap则是对外部ResultMap的引用,resultMap解决复杂查询是的映射问题。这篇文章主要介绍了Mybatis中的resultType和resultMap查询操作实例详解,需要的朋友可以参考下
    2016-09-09
  • MyBatis之二级缓存用法及说明

    MyBatis之二级缓存用法及说明

    本文介绍了MyBatis二级缓存的设计与实现,涵盖其在MyBatis中的位置、源码解析、详细使用案例、最佳实践总结及源码调试技巧等内容,强调了设计模式的应用,如装饰器模式、模板方法模式等,并提供了缓存穿透、击穿、雪崩等问题的解决方案
    2026-05-05
  • SpringBoot2开发从0开始Spring Initailizr初始化

    SpringBoot2开发从0开始Spring Initailizr初始化

    这篇文章主要为大家介绍了SpringBoot2从0开始lombok、devtools、Spring Initailizr的开发技巧,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-05-05

最新评论