一个简单的对象的set方法
[code="java"]
public void setId(long id){
this.id=id;
}
[/code]
当执行:
[code="java"]
int i=-1;
setId(i);
[/code]
时,id是-1;
但执行:
[code="java"]
setId(-1);
[/code]
时,id是4833047709445259263;
这是为什么?int转换为long的缘故吗?
像这样的问题,LZ可以写个简单的例子测试一下。
应该是你程序的问题。
用Debug,单步执行到那条语句,查看当前的变量,一切就明了了。
因为 -1 的字面值类型是int型,而方法的参数是long型,java编译器在编译时作语义检查时,把int的-1转成了long型,可能在转换的时候因为精度丢失造成了那样的问题
我运行的结果都是 -1 。
不知道为什么会出现你说的情况??
[code="java"]public class T {
private long id;
private void setId(long id){
this.id=id;
}
public void test(){
int i=-1;
setId(i);
System.out.println(id);
setId(-1);
System.out.println(id);
}
public static void main(String[] agrs){
new T().test();
}
}[/code]
说明一下代码详细的上下文吧,应该不会出错的。。。
4833047709445259263,这么大的值啊,连double都达不到哦。你这个id的值是不是在其它的地方处理了啊,怎么变得这么大。
执行结果都是-1
请问你的jdk版本
顺便把代码贴出来~
[code="java"]Long.parseLong("-1")[/code]
试过了,也是不出问题的。
o.setId(Long.parseLong("-1")); 是没有问题的。你可以Debug下你的程序,单步跟踪,去看传入的值,究竟是什么。
你可以试试简单的,不会有错的。:
[code="java"]public class T {
private long id;
private void setId(long id) {
this.id = id;
}
public void test() {
int i = -1;
setId(i);
System.out.println(id);
setId(Long.parseLong("-1"));
System.out.println(id);
}
public static void main(String[] agrs) {
new T().test();
}
}[/code]