Java中的==使用方法详解

 更新时间:2022年09月19日 09:56:21   作者:菜鸟小星啦  
这篇文章主要介绍了Java中“==”的使用方法,,==可以使用在基本数据类型变量和引用数据类型变量中,equals()是方法,只能用于引用数据类型,需要的朋友可以参考下

Java中的==符号是一个很令人费解的点,它究竟代表的是什么,下面由我来揭示一下它所包含的奥妙!

1.==在基本数据类型是比较值的大小

int a = 1;
int b = 1;
System.out.println(a==b);

上面的例子输出的结果为

true

所以在基本数据类型比较的是数值是否相等

2.在包装类中比较的是地址相等

2.1 Integer类类型==的运用

看下面的例子:

        Integer a = new Integer(1);
        Integer b = new Integer(1);
        System.out.println(a==b);

上面代码的答案是

false

通过关键字new出来的对象都是存在堆栈里面的,每new一次则在

在堆栈中创建一个对象。所以a与b的地址不一样。

我们再看下面的例子

        Integer a =1;
        Integer b = 1;
        Integer c =128;
        Integer d = 128;
        System.out.println(a==b);
        System.out.println(c==d);

上面例子答案是

true

false

为什么会出现这样子呢,我们先看看jdk中的源码吧

    public static Integer valueOf(int i) {
        if (i >= IntegerCache.low && i <= IntegerCache.high)
            return IntegerCache.cache[i + (-IntegerCache.low)];
        return new Integer(i);
    }

上面的例子使用到了自动装箱的功能, Integer a =1;等同于

Integer a = Tnteger.valueOf(1)。从jdk的源码可以得知valueOf方法在代码运行之前已经把-128-127的Intege之间r的对象存在了缓存中了,在运行的时候如果Integer对象在-128-127之间则返回缓存中的该对象,而不会重新生成对象,如果不在-128-127之间则会在堆中新创建一个对象。

2.2 String类类==的运用

在两个String用==来作比较的时候,比较的也是他的地址。

       String a =new String( "abc");
       String b =new String( "abc");
       System.out.println(a==b);

上面的例子运行结果为

false

通过关键字new出来的对象都是存在堆栈里面的,每new一次则在

在堆栈中创建一个对象。所以a与b的地址不一样。和上面Integer的new例子是一样的。

我们再看下面的例子

       String a ="abc";
       String b ="abc";
       System.out.println(a==b);

上面例子的结果是

true

String不通过new直接通过=的方式直接赋值,不是像new一个对象一样直接在堆中赋值,是先遍历常量池,看常量值有没有直接赋值的对象,有的话直接返回该对象,如果没有的话,则在常量池中新建一个String对象,返回新建的对象。因此在常量池中不会有相同的String对象。所以变量a与b指向的地址一样所以返回true。

我们再看一个例子:

       String a = "abc";
       String b = "d";
       String c ="abc"+"d";
       String d = a+b;
       String e ="abcd";
       System.out.println(c==e);
       System.out.println(d==e);

上面代码的结果是

true

false

String c ="abc"+"d";在编译的时候已经进行了优化了,"abc"+"d"编译器把他看成了一个常量表达式,所以"abc"+"d"相当于字符串常量abcd。而String d = a+b;存在变量不能进行优化,是在运行的时候才进行操作的,他同时在堆中创建了一个新的字符串对象并指向d。

到此这篇关于Java中的==使用方法详解的文章就介绍到这了,更多相关Java ==使用方法内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 关于java中自定义注解的使用

    关于java中自定义注解的使用

    这篇文章主要介绍了关于java中自定义注解的使用,注解像一种修饰符一样,应用于包、类型、构造方法、方法、成员变量、参数及本地变量的声明语句中,需要的朋友可以参考下
    2023-07-07
  • SpringBoot使用Guava实现日志脱敏的示例代码

    SpringBoot使用Guava实现日志脱敏的示例代码

    本文主要介绍了SpringBoot使用Guava实现日志脱敏的示例代码,使用Guava中的Strings、Maps和CharMatcher类来进行日志脱敏,保护敏感数据的安全,感兴趣的可以了解一下
    2024-01-01
  • Java中实现双数组Trie树实例

    Java中实现双数组Trie树实例

    这篇文章主要介绍了Java中实现双数组Trie树实例,双数组Trie就是一种优化了空间的Trie树,本文给出了实现代码、测试代码和测试结果,需要的朋友可以参考下
    2015-01-01
  • Java导出Excel文件的方法

    Java导出Excel文件的方法

    项目里很多接口都涉及导出Excel文件,所以本文给大家总结了项目中导出Excel文件的方法,并通过代码示例讲解的非常详细,具有一定的参考价值,需要的朋友可以参考下
    2025-02-02
  • 详解mybatis批量插入10万条数据的优化过程

    详解mybatis批量插入10万条数据的优化过程

    这篇文章主要介绍了详解mybatis批量插入10万条数据的优化过程,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-04-04
  • Java中的@PostConstruct注解

    Java中的@PostConstruct注解

    本文给大家介绍Java中的@PostConstruct注解的相关知识,通过示例代码给大家补充介绍了Java提供的@PostConstruct注解,Spring是如何实现的,感兴趣的朋友一起看看吧
    2025-04-04
  • SpringBoot 集成MQTT实现消息订阅的详细代码

    SpringBoot 集成MQTT实现消息订阅的详细代码

    本文介绍了如何在SpringBoot中集成MQTT并实现消息订阅,主要步骤包括添加依赖、配置文件设置、启动类注解、MQTT配置类、消息处理器配置、主题缓存、动态数据库主题配置以及消息处理服务,感兴趣的朋友跟随小编一起看看吧
    2024-11-11
  • Springboot @RequestBody注解踩坑记录

    Springboot @RequestBody注解踩坑记录

    这篇文章主要介绍了Springboot @RequestBody注解踩坑记录,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-03-03
  • 基于SpringBoot实现Web应用的登录与退出功能

    基于SpringBoot实现Web应用的登录与退出功能

    登录与退出功能作为 Web 应用中的基础且重要的组成部分,直接关系到用户的安全和隐私保护,所以本文给大家介绍了基于SpringBoot实现Web应用的登录与退出功能,文中有详细的代码供大家参考,需要的朋友可以参考下
    2024-04-04
  • SpringBoot整合Shiro的代码详解

    SpringBoot整合Shiro的代码详解

    shiro是一个权限框架,它提供了很方便的权限认证和登录的功能.下面通过本文给大家分享SpringBoot整合Shiro的代码详解,需要的的朋友参考下吧
    2017-08-08

最新评论