String ss="dfdfdf" 和 String ss=new String("dfdfdf")有什么不同吗???
在JAVA编程中什么时候需要NEW,什么时候不需要呢???
在JAVA编程中什么时候需要NEW,什么时候不需要呢???
解决方案 »
- 功能类似触发器的写法
- JTable中的celleditor用jcombobox来实现,然後在jcombobox上面添加ItemListener,为什么这个监听会执行两遍 大家可以试试 不是个别代码问题
- 用composite模式写的一个二叉树
- 初始化顺序问题
- 关于密钥的问题?初学者大家来帮忙。
- 关于ButeBuffer的问题
- 新手请教:java中String转换成int为什么会出错.
- 大家好,请问什么是装饰模式?
- 一道笔试题
- 求助:JAVA视频传输程序错误:找不到视频设备
- 關於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