遇到一个关于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判断是不是付过值,其他没有发现什么好处
分享到:
相关推荐
Java 中的 equals 方法是一个比较对象内容的方法,其声明格式是 public boolean equals(Object obj),比较规则为:当参数 obj 引用的对象与当前对象为同一个对象时,就返回 true,否则返回 false。例如: ```java ...
4.在 Java 中,Long 对象的比较应该使用 equals() 方法或 compareTo() 方法,而不是 == 运算符。 5.Java 中的自动装箱和拆箱机制可能会引起 Long == Long 的有趣现象。 6.在比较 Long 对象时,应该注意自动装箱和...
举例分析 equals 和 hashcode 方法,hashcode应该怎么样生成 8个基本类型与基本对象的比较:byte与Byte shot与Short int与Integer long与Long float与Float double与Double char与Character
equals方法的默认实现是比较两个对象的引用是否相同,这与"=="运算符的功能是一样的。但是,很多Java类都重写了equals方法以提供更加有用的行为。例如,String类就重写了equals方法,以便比较两个字符串的内容是否...
对于原始类型,`Equals()`方法的行为被覆盖,以便在传入的参数与当前对象类型相同且值相等时返回`true`。例如: ```csharp Console.WriteLine(newAge.Equals(age)); // 输出 false ``` 在这个例子中,`newAge....
基本数据类型(也称原始数据类型):byte,short,double,char,int,long,float,boolean.他们之间的比较应该用==,比较的是他们的值是否相等。 引用数据类型:当他们在用==比较的时候,比较的是他们在内存中的存放地址...
这个方法也会有数据溢出的风险,但可以通过检查 `Long` 对象的 `equals(Long.MAX_VALUE)` 或 `equals(Long.MIN_VALUE)` 来判断是否可能发生溢出。例如: ```java long ll = 300000L; int ii = new Long(ll).int...
### Java中Long与Integer比较易犯错误总结 #### 一、引言 在Java编程过程中,经常需要对数值进行比较操作。对于基本数据类型如`int`和`long`,可以直接使用`==`进行比较。然而,当涉及到它们的包装类`Integer`和`...
这与 Java 中的长整形基本数据类型 long 不同,LONG 类型主要用于不需要作字符串搜索的长串数据。 在 Hibernate 框架中,使用自定义类型映射 Oracle 中的 LONG 类型字段是一种常见的解决方案。通过实现 UserType ...
Java中long类型与Long类型的区别和大小比较详解 在Java中,long类型和Long类型都是用于表示数字的数据类型,但是它们之间存在着一定的区别。long类型是基本数据类型,而Long类型是对象类型,本文将通过示例代码详细...
7. double 类型: 使用 Double.doubleToLongBits 转换成 long 类型,然后使用 ==。 在使用 equals() 方法时,我们需要遵守上述规则,以避免出现意想不到的错误。同时,我们还需要根据实际情况选择合适的比较方式,以...
if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) { StatFs externalStatFs = new StatFs(Environment.getExternalStorageDirectory().getPath()); long blockSizeBytesExternal = ...
基本数据类型包括`byte`, `short`, `char`, `int`, `long`, `float`, `double`, 和 `boolean`。这些类型的变量在使用`==`进行比较时,比较的是它们的值是否相等。例如,两个`int`类型的变量如果存储的数值相同,`==`...
因此,如果想要比较两个 Long 对象的值是否相等,不可以使用 == 运算符,而应该使用 equals() 方法或 longValue() 方法。 bigint 数据类型 在 Java 中,bigint 并不是一个基本数据类型,而是一个封装了大整数的类...
- 为了比较两个 `Long` 或 `Integer` 对象的值是否相等,应该使用 `equals()` 方法,如 `a.equals(b)`。这样可以确保无论对象是否来自缓存,只要数值相等,结果就是 `true`。 5. **longValue() 或 intValue()**: ...
2. **“==”与 `equals()` 方法**: “==”操作符用于比较两个变量是否引用同一个对象。如果两个引用变量指向内存中的同一位置,即同一个对象实例,"=="返回 `true`。例如,`int1 == int2` 返回 `false`,因为它们...
慢等于 一个快速的,比较拖曳的字符串, 。...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,
if(sLong.equals("") || sLat.equals("")){//如果没有输入经度或纬度 Toast.makeText(Sample_15_6.this, "请输入正确的经纬度!", Toast.LENGTH_LONG).show();//输出错误信息 return; //返回 } String ...
最后,我们使用substring截取字符串获得变量类型,并与"Long"字符串进行对比,如果相等,则返回true,否则返回false。 Java判断Long类型的应用场景 在实际开发中,我们经常需要判断变量的类型,以便进行相应的处理...
Java 2实用教程(第三版)实验指导与习题解答 清华大学出版社 (编著 耿祥义 张跃平) 实验模版代码 建议使用文档结构图 (选择Word菜单→视图→文档结构图) 上机实践1 初识Java 4 实验1 一个简单的应用程序 ...