遇到一个关于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判断是不是付过值,其他没有发现什么好处
分享到:
相关推荐
举例分析 equals 和 hashcode 方法,hashcode应该怎么样生成 8个基本类型与基本对象的比较:byte与Byte shot与Short int与Integer long与Long float与Float double与Double char与Character
基本数据类型(也称原始数据类型):byte,short,double,char,int,long,float,boolean.他们之间的比较应该用==,比较的是他们的值是否相等。 引用数据类型:当他们在用==比较的时候,比较的是他们在内存中的存放地址...
慢等于 一个快速的,比较拖曳的字符串, 。...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 ...
private long javacount; /** 可使用内存. */ private long totalMemory; /** 剩余内存. */ private long freeMemory; /** 最大可使用内存. */ private long maxMemory; /** 操作系统. */ private ...
Java 2实用教程(第三版)实验指导与习题解答 清华大学出版社 (编著 耿祥义 张跃平) 实验模版代码 建议使用文档结构图 (选择Word菜单→视图→文档结构图) 上机实践1 初识Java 4 实验1 一个简单的应用程序 ...
//将GPS定位的城市与提供能查天气的城市进行匹配 StringBuilder matchCity = new StringBuilder(city); matchCity.append("."); matchCity.append(towns); //找到省份 ...
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 ""; } } /** * 判断...
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; } ...
long id=sqLiteDatabase.insert(Table_Name, name, values); ContentUris.withAppendedId(uri, id); default: break; } return uri; } @Override public Cursor query(Uri uri, String[] arg1...
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 ...
ageEditText.getText().toString().equals("")||heightEditText.getText().toString().equals("")) { Toast.makeText(SQLListDemoActivity.this, "请输入要添加的数据", Toast.LENGTH_LONG).show();/...
}else if(typeName.equals("long")) { field.setLong(obj, Long.parseLong(value)); }else if(typeName.equals("boolean")) { field.setBoolean(obj, Boolean.parseBoolean(value)); }else if...
final private long getDiskForLinuxInfo(final String dirPath) { try { String dir = dirPath.startsWith("/") ? dirPath : "/"+dirPath; long space = -1; Process process; Runtime run = Runtime.getRuntime();...
} else if (type.equals("long")) { object = jsonObject2.getLong(varName[i]); } else if (type.equals("boolean")) { object = jsonObject2.getBoolean(varName[i]); } else if (type....
if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){//判断是否插入SD卡 File filePath = Environment.getExternalStorageDirectory();//获得sd card的路径 StatFs stat = new ...
TEH TEH 代表 __T__oString __E__quals __H__ashCode TEH 使用注解来实现 toString、equals 和 hashCode,并强制... long id; @ToString String description public String toString() { return TEHUtils.toSt
表达式中有一个操作元是long型,则结果是long型的问题总结; 应该调用String的equals()方法,而不用“==”操作符的注意; java虚拟机对变量初始化为默认值。
int position, long id) { Spinner spinner = (Spinner)parent; String pro = (String)spinner.getItemAtPosition(position); ArrayAdapter<CharSequence> cityAdapter = ArrayAdapter.createFromResource ...
4.重载与重写的区别? 5.接口和抽象类区别? 6.实例变量和静态变量的区别? 7.八大基本类型及字节数和位数? 8.switch cach是否支持byte,short和long,是否支持String? 9.String中和Array中是否有length属性和length()...