public class No2 {
public static void main(String[] args){
for(int i=1;true;){
i=i+123456789;
System.out.println(i);
}
}
}为什么加到最后会出现负值?

解决方案 »

  1.   

    java中int 类型的范围是:-2147483648 到2147483648 如果正整数超过范围了会把前面的位数当成是负数符号。
      

  2.   

    加到最后超过了int的最大长度发生了溢出,就成了负的了呗
      

  3.   

    什么是溢出?
    那我int a=999999999999999999;他怎么不变成别的 ?我这也溢出了,为什么不变负数或者范围之内的数?
      

  4.   

    上面几个都说的很对的:
    1、是发生溢出了
    2、a=99999999999999999肯定是编译不过去的
    3、建议你看看java的类型定义那章,详细阅读下就明白了
      

  5.   

    超出int类型的范围 溢出了
      

  6.   

    MIN_VALUE:-2147483648
    MAX_VALUE:2147483647
      

  7.   

    你这明显是溢出了!java中int类型为有符号32位整数,并非是无限制大小的整数!超出范围,Java内部作了溢出处理!
      

  8.   

    我问你们:int a=2147483647+2147483647;//这个编译器为什么不会报错?int a=9999999999999999999999;//这个编译器为什么报错?
    我生气了!!!
      

  9.   

    但是
    int a=2147483647+2147483647
    这个也超出范围了啊,但为什么编译器不报,还能运行起来?
      

  10.   

     楼主很生气,后果没有分 
         哎呀,归根结底是数据超过了int的数据范围,就成负的了。
      

  11.   

    楼上各位都不厚道,对小学妹要好点.我来说说吧.假设变量的数据类型占用n个字节,数值超过其表示范围,直接就截取数值的最后n个字节赋值给变量.
    (其实是前n个字节,如果不知道我说什么,就姑且认为是最后的n个字节)对于int类型 int a = b; 相当于 int a = b & 0xFFFFFFFF;
    对应的,要是 byte a = b就相当于 bye a = b & 0xff;
      

  12.   

    还有一点,那个int 的长度,在java中是固定的32位,但是在C语言中和操作系统的位数是有关系的。