哪种JAVA的变量表达式使得变量a和变量b具有相同的内存引用地址????

简介: 哪种JAVA的变量表达式使得变量a和变量b具有相同的内存引用地址????

一、内存引用知识


1.内存引用地址,是指栈中存放的地址,来指向堆中的某个位置。

2.int 是基本类型,数据直接存放在栈中,不存在内存引用地址的说法


二、常见比较


2.1 int与Integer、new Integer()进行==比较时,结果永远为true


1.Integer与int比较时,Integer会有拆箱的过程,我们可以看看拆箱的代码:

@Override
public int intValue(){
  return value;
}


直接返回的就是value,因此int与Integer以及new Integer()进行 ==比较时结果都是true。


2.2 Integer与new Integer()进行==比较时,结果永远为false


Integer a=n时,如果n大于等于-128小于等于127时,会直接从IntegerCache中取,不在这个范围内,会new一个对象,所以Integer与new Integer进行 ==比较时,结果都是false。


2.3Integer与Integer进行==比较时,看范围;在大于等于-128小于等于127的范围内为true,在此范围外为false。


Integer与Integer比较,需要看范围,如果在-128~127(包含-128,不包含127)范围内,因为都是从IntegerCache中取值,所以相等;若不在这个范围内,则都要去new一个对象,所以结果为false。


2.4 new Integer() 与 new Integer() 永远都是false


这是在堆内存中创建的两个不同的对象,不可能比较的地址相同的


三、代码总结

public static void main(String[] args) {
    // 1.int 与 任何类型 相比 都是 true
        int a1 = 127;
        Integer a2 = 127;
        System.out.println(a1 == a2); // true
        int a3 = 127;
        Integer a4 = new Integer(127);
        System.out.println(a3 == a4); // true
        int a5 = 128;
        Integer a6 = 128;
        System.out.println(a5 == a6); // true
        int a7 = 128;
        Integer a8 = new Integer(128); // true
        System.out.println(a7 == a8);
    // 2.Integer 与 Integer相比 127之间为true 大于就是false
        Integer a9 = 127;
        Integer a10 = 127;
        System.out.println(a9 == a10); // true
        Integer a11 = 128;
        Integer a12 = 128;
        System.out.println(a11 == a12); // false
    // 3.Integer 与 new Integer()相比 永远false
        Integer a13 = 127;
        Integer a14 = new Integer(127);
        System.out.println(a13 == a14); // false
        Integer a15 = 128;
        Integer a16 = new Integer(128);
        System.out.println(a15 == a16); // false
    }
true
true
true
true
true
false
false
false


目录
相关文章
|
3月前
|
存储 缓存 安全
除了变量,final还能修饰哪些Java元素
在Java中,final关键字不仅可以修饰变量,还可以用于修饰类、方法和参数。修饰类时,该类不能被继承;修饰方法时,方法不能被重写;修饰参数时,参数在方法体内不能被修改。
44 3
|
29天前
|
Java Linux iOS开发
如何配置 Java 环境变量:设置 JAVA_HOME 和 PATH
本文详细介绍如何在Windows和Linux/macOS系统上配置Java环境变量。
847 12
|
2月前
|
Java API 开发者
Java中的Lambda表达式与Stream API的协同作用
在本文中,我们将探讨Java 8引入的Lambda表达式和Stream API如何改变我们处理集合和数组的方式。Lambda表达式提供了一种简洁的方法来表达代码块,而Stream API则允许我们对数据流进行高级操作,如过滤、映射和归约。通过结合使用这两种技术,我们可以以声明式的方式编写更简洁、更易于理解和维护的代码。本文将介绍Lambda表达式和Stream API的基本概念,并通过示例展示它们在实际项目中的应用。
|
3月前
|
Java 编译器
Java重复定义变量详解
这段对话讨论了Java中变量作用域和重复定义的问题。学生提问为何不能重复定义变量导致编译错误,老师通过多个示例解释了编译器如何区分不同作用域内的变量,包括局部变量、成员变量和静态变量,并说明了使用`this`关键字和类名来区分变量的方法。最终,学生理解了编译器在逻辑层面检查变量定义的问题。
Java重复定义变量详解
|
3月前
|
Java API 开发者
Java中的Lambda表达式:简洁代码的利器####
本文探讨了Java中Lambda表达式的概念、用途及其在简化代码和提高开发效率方面的显著作用。通过具体实例,展示了Lambda表达式如何在Java 8及更高版本中替代传统的匿名内部类,使代码更加简洁易读。文章还简要介绍了Lambda表达式的语法和常见用法,帮助开发者更好地理解和应用这一强大的工具。 ####
|
3月前
|
并行计算 Java 编译器
深入理解Java中的Lambda表达式
在Java 8中引入的Lambda表达式,不仅简化了代码编写,还提升了代码可读性。本文将带你探索Lambda表达式背后的逻辑与原理,通过实例展示如何高效利用这一特性优化你的程序。
|
3月前
|
搜索推荐 Java API
探索Java中的Lambda表达式
本文将深入探讨Java 8引入的Lambda表达式,这一特性极大地简化了代码编写,提高了程序的可读性。通过实例分析,我们将了解Lambda表达式的基本概念、使用场景以及如何优雅地重构传统代码。文章不仅适合初学者,也能帮助有经验的开发者加深对Lambda表达式的理解。
|
3月前
|
Java
探索Java中的Lambda表达式
【10月更文挑战第37天】本文将带你深入理解Java的Lambda表达式,从基础语法到高级特性,通过实例讲解其在函数式编程中的应用。我们还将探讨Lambda表达式如何简化代码、提高开发效率,并讨论其在实际项目中的应用。
|
3月前
|
Java 程序员 容器
Java中的变量和常量:数据的‘小盒子’和‘铁盒子’有啥不一样?
在Java中,变量是一个可以随时改变的数据容器,类似于一个可以反复打开的小盒子。定义变量时需指定数据类型和名称。例如:`int age = 25;` 表示定义一个整数类型的变量 `age`,初始值为25。 常量则是不可改变的数据容器,类似于一个锁死的铁盒子,定义时使用 `final` 关键字。例如:`final int MAX_SPEED = 120;` 表示定义一个名为 `MAX_SPEED` 的常量,值为120,且不能修改。 变量和常量的主要区别在于变量的数据可以随时修改,而常量的数据一旦确定就不能改变。常量主要用于防止意外修改、提高代码可读性和便于维护。
|
3月前
|
Java API
Java中的Lambda表达式与函数式编程####
【10月更文挑战第29天】 本文将深入探讨Java中Lambda表达式的实现及其在函数式编程中的应用。通过对比传统方法,我们将揭示Lambda如何简化代码、提高可读性和维护性。文章还将展示一些实际案例,帮助读者更好地理解和应用Lambda表达式。 ####

热门文章

最新文章