哪种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


目录
相关文章
|
9天前
|
存储 Java
java基础(7)变量以及变量的分类
Java变量是内存中存储数据的基本单元,包含数据类型、名称和字面值。变量的数据类型决定了分配的内存空间大小。变量声明格式为“数据类型 变量名;”,变量名应符合标识符命名规范。变量可以重新赋值,但数据类型需一致。变量可以一行声明多个,作用域决定了变量的可用范围。变量分为局部变量和成员变量,局部变量定义在方法体内,成员变量定义在方法体外、类体内。
23 2
|
9天前
|
存储 缓存 Java
java线程内存模型底层实现原理
java线程内存模型底层实现原理
java线程内存模型底层实现原理
|
5天前
|
存储 算法 Java
深入解析 Java 虚拟机:内存区域、类加载与垃圾回收机制
本文介绍了 JVM 的内存区域划分、类加载过程及垃圾回收机制。内存区域包括程序计数器、堆、栈和元数据区,每个区域存储不同类型的数据。类加载过程涉及加载、验证、准备、解析和初始化五个步骤。垃圾回收机制主要在堆内存进行,通过可达性分析识别垃圾对象,并采用标记-清除、复制和标记-整理等算法进行回收。此外,还介绍了 CMS 和 G1 等垃圾回收器的特点。
14 0
深入解析 Java 虚拟机:内存区域、类加载与垃圾回收机制
|
11天前
|
Java 编译器
深入理解Java内存模型:从基础到高级
本文旨在通过通俗易懂的方式,引导读者深入理解Java内存模型(JMM)的核心概念和工作原理。我们将从简单的基础知识入手,逐步探讨重排序、顺序一致性问题以及volatile关键字的实现机制等高级主题。希望通过这篇文章,你能够对Java内存模型有一个清晰、全面的认识,并在实际编程中有效地避免并发问题。
|
9天前
|
存储 算法 Java
深入理解Java内存管理
本文将通过通俗易懂的语言,详细解析Java的内存管理机制。从JVM的内存结构入手,探讨堆、栈、方法区等区域的具体作用和原理。进一步分析垃圾回收机制及其调优方法,最后讨论内存泄漏的常见场景及防范措施。希望通过这篇文章,帮助读者更好地理解和优化Java应用的内存使用。
|
13天前
|
监控 算法 Java
Java中的内存管理与垃圾回收机制
本文将深入探讨Java编程语言中的内存管理方式,特别是垃圾回收(Garbage Collection, GC)机制。我们将了解Java虚拟机(JVM)如何自动管理内存,包括对象创建、内存分配以及不使用对象的回收过程。同时,我们还将讨论不同的垃圾回收算法及其在不同场景下的应用。
|
12天前
|
监控 算法 Java
深入理解Java中的垃圾回收机制在Java编程中,垃圾回收(Garbage Collection, GC)是一个核心概念,它自动管理内存,帮助开发者避免内存泄漏和溢出问题。本文将探讨Java中的垃圾回收机制,包括其基本原理、不同类型的垃圾收集器以及如何调优垃圾回收性能。通过深入浅出的方式,让读者对Java的垃圾回收有一个全面的认识。
本文详细介绍了Java中的垃圾回收机制,从基本原理到不同类型垃圾收集器的工作原理,再到实际调优策略。通过通俗易懂的语言和条理清晰的解释,帮助读者更好地理解和应用Java的垃圾回收技术,从而编写出更高效、稳定的Java应用程序。
|
5天前
|
安全 Java 调度
Java编程时多线程操作单核服务器可以不加锁吗?
Java编程时多线程操作单核服务器可以不加锁吗?
18 2
|
14天前
|
缓存 Java 应用服务中间件
Java虚拟线程探究与性能解析
本文主要介绍了阿里云在Java-虚拟-线程任务中的新进展和技术细节。
|
11天前
|
Java 开发者
Java中的多线程基础与应用
【9月更文挑战第22天】在Java的世界中,多线程是一块基石,它支撑着现代并发编程的大厦。本文将深入浅出地介绍Java中多线程的基本概念、创建方法以及常见的应用场景,帮助读者理解并掌握这一核心技术。
下一篇
无影云桌面