免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2298 | 回复: 4
打印 上一主题 下一主题

string s = 'X'快?。。。【已解决】 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-08-02 11:41 |只看该作者 |倒序浏览
俺是初学java。发现基本数据类型既可以用普通方式声明也可以用new来声明。觉得有些困惑,所以做了两个例子:

例子1:String s = 'x';
例子2:String s = new String('x');

然后分别用javap来看,得到如下结果:

例子1:
java.lang.String s;

public java_sample.test1();
  Code:
   0:   aload_0
   1:   invokespecial   #1; //Method java/lang/Object."<init>")V
   4:   aload_0
   5:   ldc     #2; //String abc
   7:   putfield        #3; //Field s:Ljava/lang/String;
   10:  return

}

例子2:
java.lang.String s;

public java_sample.test2();
  Code:
   0:   aload_0
   1:   invokespecial   #1; //Method java/lang/Object."<init>")V
   4:   aload_0
   5:   new     #2; //class java/lang/String
   8:   dup
   9:   ldc     #3; //String abc
   11:  invokespecial   #4; //Method java/lang/String."<init>"Ljava/lang/Strin
gV
   14:  putfield        #5; //Field s:Ljava/lang/String;
   17:  return

}

明显看出例子1比例子2要精炼些。那么可以认为例子1的方式快于例子2吗?

谢谢!

[ 本帖最后由 blue_mliu 于 2007-8-6 10:18 编辑 ]

论坛徽章:
0
2 [报告]
发表于 2007-08-02 14:33 |只看该作者

论坛徽章:
0
3 [报告]
发表于 2007-08-02 14:55 |只看该作者
首先,谢谢楼上的回答。

和我的问题不是完全一样的。如果是例子2,那么就是一样的。问题是对于例子1而言没有new,也就是说没有string对象的实例化。所以其中的s变量只存放在堆中。所以我认为还是例子1快些!。

论坛徽章:
0
4 [报告]
发表于 2007-08-03 09:29 |只看该作者
原帖由 blue_mliu 于 2007-8-2 14:55 发表
首先,谢谢楼上的回答。

和我的问题不是完全一样的。如果是例子2,那么就是一样的。问题是对于例子1而言没有new,也就是说没有string对象的实例化。所以其中的s变量只存放在堆中。所以我认为还是例子1快些!。

上面讲的是虚拟机的处理过程,

你觉得是创建一个对象快还是两个快呢?

论坛徽章:
0
5 [报告]
发表于 2007-08-06 10:18 |只看该作者
和俺想的一样还是String s = 'X'快。

谢谢了!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP