java 知识相关的问题,,,,,,,,,

package caishuzi;

import java.util.Random;
import java.util.Scanner;

public class User3 {
public static void main(String[] args){
int a = new Random().nextInt(101);
while(a == 0){
a = new Random().nextInt(101);
}
//System.in 代表标准键入,就是键盘输入
Scanner sc = new Scanner(System.in);
while(sc.hasNextInt()){

        try{
            int guess = Integer.valueOf(sc.next());
            System.out.println("您好,您输入的数字是:" + guess);
            if(guess > a){
                System.out.println("您好,您猜大了。");
            }
            else if(guess < a){
                System.out.println("您好,您猜小了。");
            }
            else{
                System.out.println("您好,您猜对了。");
                break;
            }
        }catch(NumberFormatException n){
            System.out.println("您好,您的输入有误!");
        }

   }
}

}
出现的问题是:在我自己的电脑上,上面的代码运行正常,。但是换了台电脑,重新运行时,int guess = Integer.valueOf(sc.next());程序在这行出错,提示是:不能将Integer包装类直接赋给 int 类型的 变量 guess,,这是什么原因导致的呢?

将这行代码换为:int guess = Integer.parseInt(sc.next());

int guess = sc.nextInt();
(则可能运行正常)
出现上面的情况是什么原因导致的呢?求大神们帮忙解解疑惑,先谢谢各位了

java在1.5版本加入的语法糖,就是可以自动完成基本类型的装箱拆箱。
所谓自动装箱,就是可以自动调用Integer.vauleOf(int)将int包装为Integer;
自动拆箱,就是可以自动调用Integer.intValue()将Integer拆为int。

出现你描述的问题,应该是因为你能正常运行的Java环境版本不低于1.5,而报错的环境Java版本低于1.5。

Integer.parseInt()返回的是int,sc.nextInt()返回的也是int,Integer.valueOf返回的是 int 包装类Integer,从Jdk1.5开始,java支持自动装箱拆箱。
而Scanner 也是Since Jdk1.5,Scanner没报错,拆箱报错,所以我怀疑jdk版本是对的,项目编译环境可能在1.4以下,可以查看以下