java方法的参数设置变量和直接设置字面量有什么区别?

一个简单的对象的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]