String ss="dfdfdf" 和 String ss=new String("dfdfdf")有什么不同吗???
在JAVA编程中什么时候需要NEW,什么时候不需要呢???
在JAVA编程中什么时候需要NEW,什么时候不需要呢???
解决方案 »
- spring(2.5)和struts2(2.0.14)集成问题!跪求高手指教!
- 那家软件能把详细设计做好!!!
- swing线程问题
- 关于resustset中的deleteRow方法
- 关于IREPORT的打印预览问题
- access +jsp 模糊查询
- 高手救命——如何获得在IE中设置的代理服务器保存在本机的用户名、密码?
- 急急急...在一个线程里创建了一个界面窗口后..线程无法start()
- 彻底拯救我的jdk环境变量设置!!
- Java可以调用Win32API和COM的东西吗?-netix
- 關於ArrayList的疑問(remove操作之後,size變小?)
- 【求助】为什么内部类传参要求对象是final的?不然就会编译错误?是出于什么考虑呢?
http://community.csdn.net/Expert/TopicView3.asp?id=4544312
第二个问题同楼上的说法,比较好理解。
虚拟机会在对象堆中寻找值为"hello"的String对象,如果已经存在一个这样的String对象,那么就把s指向这个对象,也就是说并没有真正创建新的String对象。(这是由于String是非可变类,并且用"hello"来创建更像是调用静态工厂,返回静态实例。)而用String s = new String("hello");来创建,虚拟机创建一个新的值为"hello"的String对象,让s指向这个新创建的对象。2.用new是要创建完全新的对象,无论对象堆中是否已经存在这样的对象,而还有其他方法来获得指向具体对象的引用比如,可以用比如静态工厂Integer integer = Integer.valueOf(1);或像第一个问题中String s = "hello";(前提是对象堆中已有这样的对象)。
特殊地,在jdk1.5中,也可以直接写Integer integer = 1;只不过是jvm自动为你做包裹(wrap)的事。
如果你不需要创建对象,而只是想调用类中的静态成员或方法,就可以直接使用MyClass.myFunction()来调用,就像上面提到的静态工厂一样,Integer.valueOf(1),或者System.out.println();
http://blog.csdn.net/comstep/archive/2006/02/21/604543.aspx