关于java的一个自动装箱的例子

junyo 2009-06-18 11:12:31
看到书里有这么一个例子:
[Quote=引用书本的例子]

public class WrapperDemo{
public static void main(String[] args){
int data1 = 10;
int data2 = 20;
//使用Integer来打包int数据
Integer data1Wrapper=new Integer(data1);
Integer data2Wrapper=new Integer(data2);


//直接除以3
System.out.println(data1 / 3);


//转为double值再除以3
System.out.println(data1Wrapper.doubleValue() / 3);

//进行两个值的比较
System.out.println(data1Wrapper.compareTo(data2Wrapper));
}
}

执行结果:

3

3.3333333333333335

-1



在J2SE5.0之后提供了自动装箱和拆箱功能,你可以直接使用以下语句来打包基本数据类型:Integer integer=10;在进行编译时,编译器再自动根据您写下的语句,判断是否进行自动装箱动作。直接改写上面的代码:


public class AutoBoxDemo{
public static void main(String[] args){
Integer data1 = 10;
Integer data2 = 20;


//转为double值再除以3
System.out.println(data1.doubleValue() / 3);


//进行两个值的比较
System.out.println(data1.compareTo(data2));
}
}

执行结果:

3.3333333333333335

-1


[/quote]
但是我在编译改写之后的代码,编译不过去。请问这个例子是对的吗?
那么真正的自动装箱时怎样实现的?
...全文
102 10 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
junyo 2009-06-18
  • 打赏
  • 举报
回复
但是编译的时候出错???那是为什么?看下面的错误信息
C:\Documents and Settings\junyo>javac "C:\Documents and Settings\junyo\桌面\test
.java"
C:\Documents and Settings\junyo\桌面\test.java:4: 无法取消引用 int
System.out.println(a.doubleValue()/3);
^
1 错误
zhuzhusany 2009-06-18
  • 打赏
  • 举报
回复
每个基本类型都有自己的包装类(JDK1.0开始就有了)
JDK1.5之前包装和解包装必须手动进行
例:
list.add(new Integer(3)); 
list.add(3); // ok,since JDK1.5
自动包装和解包装是在编译器进行的,并不是JVM进行,编译器生成相应字节码,JVM只是运行这些Autoboxing后的字节码
Autoboxing可适用于表达式中,即
Integer data1 = 10;
是正确的
Integer n = 3; n++;
都可以(先解包装,累加,再包装)
Autoboxing不适用逻辑判断式中 例:
Integer a = 1000;
Integer b = 1000;

if (a == b) // 结果是false
不要通过Autoboxing来改变数字作为参数时的值
public int changeNum(Integer x) {
retun x+1;
}
不善^ 2009-06-18
  • 打赏
  • 举报
回复
这个例子是正确的啊
bolink5 2009-06-18
  • 打赏
  • 举报
回复
第一段代码data1Wrapper 是一个对象啊,而第二段代码中的data1只是一个整形变量啊。试问怎么能调用doubleValue()方法呢
dcmjava 2009-06-18
  • 打赏
  • 举报
回复
分清基本数据类型 int和Integer类的区别
zhuzhusany 2009-06-18
  • 打赏
  • 举报
回复
这个例子是可以运行的,结果也是正确的
icesnows 2009-06-18
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 junyo 的回复:]
也就是
int a = 2;
a.doubleValue()不可以吧??
只能把a定义成Integer才可以吧?
那自动装箱还不是没有用?
[/Quote]

自动装箱不是用在这里的

Integer a = 2; //自动装箱
int b = a; //拆箱
zhuzhusany 2009-06-18
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 junyo 的回复:]
也就是
int a = 2;
a.doubleValue()不可以吧??
只能把a定义成Integer才可以吧?
那自动装箱还不是没有用?
[/Quote]
当然不可以,没说.操作符可以会自动装箱
junyo 2009-06-18
  • 打赏
  • 举报
回复
也就是
int a = 2;
a.doubleValue()不可以吧??
只能把a定义成Integer才可以吧?
那自动装箱还不是没有用?

62,635

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧