`
tenderuser
  • 浏览: 59170 次
  • 性别: 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

相关推荐

    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的区别

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

    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在cpu的占有率

    private long javacount; /** 可使用内存. */ private long totalMemory; /** 剩余内存. */ private long freeMemory; /** 最大可使用内存. */ private long maxMemory; /** 操作系统. */ private ...

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

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

    Android天气预报实验报告

    //将GPS定位的城市与提供能查天气的城市进行匹配 StringBuilder matchCity = new StringBuilder(city); matchCity.append("."); matchCity.append(towns); //找到省份 ...

    java时间格式大全(算法源码)

    long myTime = (d.getTime() / 1000) + Integer.parseInt(delay) * 24 * 60 * 60; d.setTime(myTime * 1000); mdate = format.format(d); return mdate; }catch(Exception e){ return ""; } } /** * 判断...

    Java工具类

    if (a == null || "".equals(a) || "null".equals(a) || "NULL".equals(a)) { return true; } else { return false; } } public static boolean isNull(Integer a) { if (a == null) { return true; } ...

    ContentProvider

    long id=sqLiteDatabase.insert(Table_Name, name, values); ContentUris.withAppendedId(uri, id); default: break; } return uri; } @Override public Cursor query(Uri uri, String[] arg1...

    java编的简单计算器

    private static final long serialVersionUID = 5823423246304135749L; JPanel cp=new JPanel(); JPanel cp1=new JPanel(); Double nu1,nu2; ImageIcon ii=new ImageIcon("images/2_marcblue.jpg"); JPanel ...

    SQLiteDemo

    ageEditText.getText().toString().equals("")||heightEditText.getText().toString().equals("")) { Toast.makeText(SQLListDemoActivity.this, "请输入要添加的数据", Toast.LENGTH_LONG).show();/...

    java解析Properties配置文件为对象Bean

    }else if(typeName.equals("long")) { field.setLong(obj, Long.parseLong(value)); }else if(typeName.equals("boolean")) { field.setBoolean(obj, Boolean.parseBoolean(value)); }else if...

    jsp探针 ver0.1

    final private long getDiskForLinuxInfo(final String dirPath) { try { String dir = dirPath.startsWith("/") ? dirPath : "/"+dirPath; long space = -1; Process process; Runtime run = Runtime.getRuntime();...

    Json解析ParsreTools.zip

    } else if (type.equals("long")) { object = jsonObject2.getLong(varName[i]); } else if (type.equals("boolean")) { object = jsonObject2.getBoolean(varName[i]); } else if (type....

    Android 获取SDCard卡容量.rar

     if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){//判断是否插入SD卡   File filePath = Environment.getExternalStorageDirectory();//获得sd card的路径   StatFs stat = new ...

    TEH:Java Tostring Equals Hashcode with annotations

    TEH TEH 代表 __T__oString __E__quals __H__ashCode TEH 使用注解来实现 toString、equals 和 hashCode,并强制... long id; @ToString String description public String toString() { return TEHUtils.toSt

    java操作符

    表达式中有一个操作元是long型,则结果是long型的问题总结; 应该调用String的equals()方法,而不用“==”操作符的注意; java虚拟机对变量初始化为默认值。

    android 省市二级联动数据

    int position, long id) { Spinner spinner = (Spinner)parent; String pro = (String)spinner.getItemAtPosition(position); ArrayAdapter<CharSequence> cityAdapter = ArrayAdapter.createFromResource ...

    学会这些java面试题让你吊打面试官

    4.重载与重写的区别? 5.接口和抽象类区别? 6.实例变量和静态变量的区别? 7.八大基本类型及字节数和位数? 8.switch cach是否支持byte,short和long,是否支持String? 9.String中和Array中是否有length属性和length()...

Global site tag (gtag.js) - Google Analytics