发帖    主题    评论    推荐    标签    作者    订阅    查搜    注册   登陆   关注
 
面向对象 设计模式 领域驱动设计 企业架构 框架 开发教程 微服务 大数据 扩展性 并发编程 事件驱动 分布式 CQRS

语法问题

hxz
2003-03-20 08:21
赞助商链接

在C++中有两种方式来建立一个对象 在堆中和在栈中
但在java中 据说有一个种那就是在堆中了!用new来申明(除去一些特殊情况)

那:
String a ="aaaaaaaaaa";
String a= new String("aaaaaaaaa");

有什么区别?

2003-03-20 10:36

没有区别,写法区别而已,String是个对象

2004-07-09 19:12

首先,我们要知道,"aaaaaaaaaa"这个字符常量是在Class结构的Constant Pool里面分配的。
参考这个link.
http://jakarta.apache.org/bcel/manual.html
里面有类加载到内存中的结构。


字符串常量和一般字符串还是有一些区别:
字符串常量的声明方法,和一般字符串的声明方法之间的区别。下面举例说明这个区别。

String a = “ABC”; // 字符串常量
String b = “ABC”; // 字符串常量
String c = new String(“ABC”); // 不是字符串常量

这里我们有a == b,a和b 这两个字符串的reference相等,都指向字符串常量”ABC”。
尽管c.equals(a)并且c.equals(b),但是c != a,c != b。c有自己的reference,指向new String(“ABC”)。

可以运行这段代码,看看结果。
这可能是JVM为了做优化所导致的结果。

赞助商链接

赞助商链接

返回顶部

移动版 关于本站 使用帮助 联系管理员 最佳分辨率1366x768
OpenSource JIVEJDON Powered by JdonFramework Code © 2002-20 jdon.com