`

Java判断Long类型相等问题

阅读更多
// Long类型判断相等时,比如Long a = 10L, Long b = 10L;习惯是判断a == b;
Long a = 10L;
Long b = 10L;
		
if(a == b) { // true
  System.out.println("aike1");
}
		
Long c = 128L;
Long d = 128L;
		
if(c == d) { // false
  System.out.println("aike2");
}

if(c.valueOf(12) == d.valueOf(12)) { // true
  System.out.println("aike3");
}
		
if(c.valueOf(128) == d.valueOf(128)) { // false
  System.out.println("aike4");
}

// 为什么等于128时就不相等呢?

// 查看Java源码Long.class
private static class LongCache {  
  private LongCache(){}
  static final Long cache[] = new Long[-(-128) + 127 + 1];
  static {
    for(int i = 0; i < cache.length; i++)
      cache[i] = new Long(i - 128);
  }
}

 public static Long valueOf(long l) {
        final int offset = 128;
        if (l >= -128 && l <= 127) { // will cache
            return LongCache.cache[(int)l + offset];
        }
        return new Long(l);
    }
/*原来是因为Long中有一个静态的内部类LongCache,专门用于缓存-128至127之间的值,一共256个元素。
如果仅仅是缓存下来而不去使用那么就没有任何意义。
valueOf(long l)就是使缓存派上用场的方法,它会判断传入的参数是否在-128-127之间,如果是则直接从缓存中返回对应的引用,否则新创建一个Long的实例。

对于新创建的Long实例, ==比较是否为同一对象, 所以大于127就不相等了。*/

// 判断方法 使用equals  Long重写了equals方法,如下:

public boolean equals(Object obj) {  
  if (obj instanceof Long) {
      return value == ((Long)obj).longValue();
  }
  return false;
}

它是先通过.longValue()方法获取Long对象的基本类型long的值之后再做比较的。

但是我们用longValue比较时容易忘记后面一个包装类调longValue方法
所以,最好还是使用equals进行比较。也可以直接用.longValue()比较



分享到:
评论

相关推荐

    java判断Long类型的方法和实例代码

    Java判断Long类型的方法和实例代码 Java是一种流行的编程语言,广泛应用于安卓开发、Web开发、企业软件开发等领域。在Java编程中,我们经常需要判断变量的类型,特别是判断Long类型,因为Long类型是Java中的一种...

    Java中long类型与Long类型的区别和大小比较详解

    Java中long类型与Long类型的区别和大小比较详解 在Java中,long类型和Long类型都是用于表示数字的数据类型,但是它们之间存在着一定的区别。long类型是基本数据类型,而Long类型是对象类型,本文将通过示例代码详细...

    Java 判断数组是否相等的方法示例

    "Java 判断数组是否相等的方法示例" Java 中判断数组是否相等的方法示例是指在 Java 编程语言中检查两个数组是否完全相同的方法,这两种方法都可以实现数组的比较。 第一种方法:使用 Arrays.equals() 方法 ...

    Java判断2个List集合是否相等(不考虑元素的顺序)

    Java判断2个List集合是否相等(不考虑元素的顺序) Java是一种面向对象的编程语言,它提供了许多有用的集合类来存储和操作数据,其中List集合是最常用的集合之一。在实际开发中,我们经常需要判断两个List集合是否...

    java判断题

    ### Java判断题知识点详解 #### 1. Java程序中的起始类名称必须与存放该类的文件名相同。(正) **解析**:这是正确的。在Java中,包含`public`类的源文件名必须与该类名完全相同,包括大小写。如果一个Java程序...

    回文数字的判断(Java)

    这个程序适合Java初学者学习,它涵盖了基本的数据类型转换、字符串操作和条件判断,这些都是编程基础中的重要部分。同时,通过解决回文数字问题,可以帮助初学者理解和实践这些概念。在学习过程中,学生可以通过调试...

    java BigDecimal操作

    总的来说,理解和熟练运用BigDecimal是每个Java开发者必备的技能之一,特别是在处理货币计算、财务计算等场景时,能够避免因为浮点数精度问题导致的错误。在使用BigDecimal时,一定要注意其性能开销,因为它比基本的...

    test2_JavaDouble类型比较大小_java编程_

    比较位模式后再转换回`Double`,可以更精确地判断两个`Double`值是否相等。 总结来说,当在Java中处理`Double`类型的数值比较时,应避免直接使用大于或小于符号,而是利用`Double.compare()`或`doubleToLongBits()`...

    [推荐]JAVA第二章变量数据类型和运算符

    基本数据类型包括整型(如`byte`, `short`, `int`, `long`)、浮点型(`float`, `double`)、字符型(`char`)和布尔型(`boolean`)。引用数据类型则包括类(class)、接口(interface)和数组,它们存储的是对象的...

    java判断回文数.docx

    例如,如果输入的整数超过了 `int` 类型的最大值,需要使用 `long` 类型来存储。此时,`String.valueOf()` 会自动处理类型转换,但仍需要注意在比较时使用 `Long.toString()` 和 `Long.parseLong()`。此外,对于负数...

    Java岗面试核心MCA版.pdf

    1. 数据类型:Java有八种基本数据类型:byte、short、int、long、float、double、boolean、char。 2. switch语句:switch语句可以作用在byte、short、int、char上,但不能作用在long和String上。 3. Math.round...

    细数java中Long与Integer比较容易犯的错误总结

    在Java编程语言中,`Long` 和 `Integer` 是两种包装类型,用于封装基本类型 `long` 和 `int` 的值。在处理这些包装类型时,开发者常常会遇到一些常见错误,尤其是涉及到对象比较的时候。以下是一些关于 `Long` 和 `...

    Java语言程序设计实用教程类型与运算符PPT教案学习.pptx

    需要注意的是,浮点数之间的比较不能直接使用“==”,因为浮点数的精度问题可能导致误判,通常使用`Math.abs(x - y) 精度阈值`来判断两个浮点数是否近似相等。 4. 类型转换: Java的数据类型转换分为自动类型转换...

    50个Java常用面试题

    这些知识点是Java开发者经常遇到的面试问题,涉及Java的基本特性、数据类型、类和对象、字符串处理等核心概念。对于准备参加面试的人来说,理解这些知识点是非常必要的,它们可以帮助面试者更好地展示自己的Java知识...

    Java 自学宝典 第二章 数据类型

    ### Java自学宝典第二章:数据类型 #### 2.1 数据类型介绍 在Java中,数据类型是用来定义变量能够存储的数据种类。根据其性质,数据类型可以分为两大类:基本数据类型和引用数据类型。 ##### 2.1.1 基本数据类型 ...

    java练习题作业.docx

    基本类型包括整数类型(int、short、long)、浮点类型(float、double)、字符类型(char)、布尔类型(boolean)。引用类型包括数组、类、接口等。 变量 在 Java 中,变量用于存储数据。变量包括基本类型变量和...

    Java基础预习笔记

    Java 中有八种基本数据类型:byte、short、int、long、float、double、char、boolean。其中,整数类型包括 byte、short、int、long,浮点数类型包括 float 和 double,字符类型包括 char,布尔类型包括 boolean。 ...

    最近5年133个Java面试问题列表

    - 当两个对象相等时(通过`equals()`方法判断),它们的`hashCode()`方法必须返回相同的整数值。 - 如果两个对象的`hashCode()`相同,并不一定意味着它们是相等的;也就是说,`hashCode()`可能会发生碰撞。但是,...

Global site tag (gtag.js) - Google Analytics