`
tenderuser
  • 浏览: 61332 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

Long 的== 与equals

    博客分类:
  • java
 
阅读更多
遇到一个关于Long的问题,
Long i = 130L;
经过网络传输后,在jboss中执行
Long b = 130L;
i == b 判断时竟然没有返回true, 关于Long的自动装箱以前也看到过相关的东西,只是没有想到会被自己碰到。
经过测试java在对Long类型进行序列话的时候应该是根据基本类型来做的;在上面的执行程序应该可以等价如下:
Long i = Long.valueOf(130);//这个过程中会自动装箱,本身缓存-128--127中间的数字,其他会重新new

在网络传输的时候之前:
bef = Long.longValue();
objectOutputStream.writeLong(bef);

传输之后
long ret = objectInputStream.readLong();
Long i = Long.valueOf(ret); //同样不会自动装箱,重新new出来
Long b = Long.valueOf(130); //
i == b //false;

由此得出两个结论:
1、Long类型的比较,对于在-128-----127之间的数字,==,和equals比较是等价的,而对于不再这个范围的数字,比较应以equals为准。
2、Long类型,虽然实现了Serializable接口,但是其本身并不参与序列化,在序列话之前,将Long类型的数字转换为基本类型。在序列化之后,将基本类型转换为对应的包装类型。

猜测,所谓的自动装箱,也就是在必要的时候,自动调用Number类型中的,valueOf(long、int、float、double)等方法,在需要的时候,又会转换为基本类型。。。

问题: java本身并不是完全的面向对象的语言,在1.5之后添加了自动装箱机制,这里引入这个东西的原因是什么呢?  仅仅是为了统一? 还是有其他考虑。
目前感觉包装类型的好处有,能够通过null判断是不是付过值,其他没有发现什么好处  





0
4
分享到:
评论
2 楼 tenderuser 2012-07-05  
xiaoyu1985ban 写道
自动装箱是有编译器来实现的,这个问题我也遇到过。
http://xiaoyu1985ban.iteye.com/blog/1384191


是的呀, java引入自动装箱这个东西的本意是什么呢?  为了统一的面向对象?还是其他呀
1 楼 xiaoyu1985ban 2012-07-05  
自动装箱是有编译器来实现的,这个问题我也遇到过。
http://xiaoyu1985ban.iteye.com/blog/1384191

相关推荐

    ==和equals的区别

    Java 中的 equals 方法是一个比较对象内容的方法,其声明格式是 public boolean equals(Object obj),比较规则为:当参数 obj 引用的对象与当前对象为同一个对象时,就返回 true,否则返回 false。例如: ```java ...

    java Long==Long有趣的现象详解

    4.在 Java 中,Long 对象的比较应该使用 equals() 方法或 compareTo() 方法,而不是 == 运算符。 5.Java 中的自动装箱和拆箱机制可能会引起 Long == Long 的有趣现象。 6.在比较 Long 对象时,应该注意自动装箱和...

    java 举例分析 equals hashcode 基本类型与基本对象的比较 shot与Short int与Integer long与Long

    举例分析 equals 和 hashcode 方法,hashcode应该怎么样生成 8个基本类型与基本对象的比较:byte与Byte shot与Short int与Integer long与Long float与Float double与Double char与Character

    java中equals和==的区别.pdf

    equals方法的默认实现是比较两个对象的引用是否相同,这与"=="运算符的功能是一样的。但是,很多Java类都重写了equals方法以提供更加有用的行为。例如,String类就重写了equals方法,以便比较两个字符串的内容是否...

    C#中的 == 和equals()区别浅析

    对于原始类型,`Equals()`方法的行为被覆盖,以便在传入的参数与当前对象类型相同且值相等时返回`true`。例如: ```csharp Console.WriteLine(newAge.Equals(age)); // 输出 false ``` 在这个例子中,`newAge....

    Java中==与equals的区别

    基本数据类型(也称原始数据类型):byte,short,double,char,int,long,float,boolean.他们之间的比较应该用==,比较的是他们的值是否相等。 引用数据类型:当他们在用==比较的时候,比较的是他们在内存中的存放地址...

    java中long类型转换为int类型-java long转int.pdf

    这个方法也会有数据溢出的风险,但可以通过检查 `Long` 对象的 `equals(Long.MAX_VALUE)` 或 `equals(Long.MIN_VALUE)` 来判断是否可能发生溢出。例如: ```java long ll = 300000L; int ii = new Long(ll).int...

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

    ### Java中Long与Integer比较易犯错误总结 #### 一、引言 在Java编程过程中,经常需要对数值进行比较操作。对于基本数据类型如`int`和`long`,可以直接使用`==`进行比较。然而,当涉及到它们的包装类`Integer`和`...

    hibernate映射Oracle中LONG类型

    这与 Java 中的长整形基本数据类型 long 不同,LONG 类型主要用于不需要作字符串搜索的长串数据。 在 Hibernate 框架中,使用自定义类型映射 Oracle 中的 LONG 类型字段是一种常见的解决方案。通过实现 UserType ...

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

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

    Java equals()方法使用详解及总结

    7. double 类型: 使用 Double.doubleToLongBits 转换成 long 类型,然后使用 ==。 在使用 equals() 方法时,我们需要遵守上述规则,以避免出现意想不到的错误。同时,我们还需要根据实际情况选择合适的比较方式,以...

    android获取手机内存大小

    if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) { StatFs externalStatFs = new StatFs(Environment.getExternalStorageDirectory().getPath()); long blockSizeBytesExternal = ...

    java中equals和等号(==)的区别浅谈

    基本数据类型包括`byte`, `short`, `char`, `int`, `long`, `float`, `double`, 和 `boolean`。这些类型的变量在使用`==`进行比较时,比较的是它们的值是否相等。例如,两个`int`类型的变量如果存储的数值相同,`==`...

    Java的long和bigint长度对比详解

    因此,如果想要比较两个 Long 对象的值是否相等,不可以使用 == 运算符,而应该使用 equals() 方法或 longValue() 方法。 bigint 数据类型 在 Java 中,bigint 并不是一个基本数据类型,而是一个封装了大整数的类...

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

    - 为了比较两个 `Long` 或 `Integer` 对象的值是否相等,应该使用 `equals()` 方法,如 `a.equals(b)`。这样可以确保无论对象是否来自缓存,只要数值相等,结果就是 `true`。 5. **longValue() 或 intValue()**: ...

    java操作符

    2. **“==”与 `equals()` 方法**: “==”操作符用于比较两个变量是否引用同一个对象。如果两个引用变量指向内存中的同一位置,即同一个对象实例,"=="返回 `true`。例如,`int1 == int2` 返回 `false`,因为它们...

    slow-equals:慢等于 - 比较两个字符串

    慢等于 一个快速的,比较拖曳的字符串, 。...Compare tow equal long strings: slow-equals x 6,905,069 ops/sec ±0.74% (96 runs sampled) === x 64,830,622 ops/sec ±0.98% (96 runs sampled) == x 65,

    Android 根据经纬查看街景.rar

     if(sLong.equals("") || sLat.equals("")){//如果没有输入经度或纬度   Toast.makeText(Sample_15_6.this, "请输入正确的经纬度!", Toast.LENGTH_LONG).show();//输出错误信息   return; //返回  }  String ...

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

    最后,我们使用substring截取字符串获得变量类型,并与"Long"字符串进行对比,如果相等,则返回true,否则返回false。 Java判断Long类型的应用场景 在实际开发中,我们经常需要判断变量的类型,以便进行相应的处理...

    Java 2实用教程(第三版)实验指导与习题解答

    Java 2实用教程(第三版)实验指导与习题解答 清华大学出版社 (编著 耿祥义 张跃平) 实验模版代码 建议使用文档结构图 (选择Word菜单→视图→文档结构图) 上机实践1 初识Java 4 实验1 一个简单的应用程序 ...

Global site tag (gtag.js) - Google Analytics