参考我以前的一个贴子:
String a ="hello" 创建了一个String对象,JAVA中会对每个字符串常量自动解析成一个String对象.
String a =new String("hello")创建了两个String对象,自动解析了一个,用new关键字创建了一个,后面的这个交给a来引用.
试验程序如下:
public class TestString {
/** Creates a new instance of TestString */
public TestString() {
}
public static void main(String[] args) {
// TODO code application logic here
int i = 0;
String a;
while(true)
{
a = new String("aa" + i++);//1
// a = "aa" + i++; //2
try {
Thread.sleep(3000);
} catch(Exception e) {}
}
}
}
这个程序运行后用profiler来查看就可以清楚的看到String对象增长的情况,语句一是一次两个的增长,改用语句二是一次一个的增长.这个是我用工具观察得出来的结论, 那么是不是就可以说, 为了不必要的内存开销, 我们在任何情况下都不需要用new去创建一个String对象.
String a ="hello" 创建了一个String对象,JAVA中会对每个字符串常量自动解析成一个String对象.
String a =new String("hello")创建了两个String对象,自动解析了一个,用new关键字创建了一个,后面的这个交给a来引用.
试验程序如下:
public class TestString {
/** Creates a new instance of TestString */
public TestString() {
}
public static void main(String[] args) {
// TODO code application logic here
int i = 0;
String a;
while(true)
{
a = new String("aa" + i++);//1
// a = "aa" + i++; //2
try {
Thread.sleep(3000);
} catch(Exception e) {}
}
}
}
这个程序运行后用profiler来查看就可以清楚的看到String对象增长的情况,语句一是一次两个的增长,改用语句二是一次一个的增长.这个是我用工具观察得出来的结论, 那么是不是就可以说, 为了不必要的内存开销, 我们在任何情况下都不需要用new去创建一个String对象.
解决方案 »
- 使用apache zip 压缩,在同一压缩目录下,同一个文件被压入多次,为何这个文件没有被覆盖,会在同一压缩目录下存在多个相同文件名的文件?
- 线程运行出现的不确定性
- Client字符访问Server数据库的困惑
- 如何进行数组和字符窜的对比,“==”和"equals"好象不行呀,还是怎么使用?
- 关于增加MouseListener()接口的问题
- 一个关于java jdk的问题
- 怎么AppletContext的showDocument()方法没有结果
- 这样能不能算作多线程
- 请问daemon在java线程中 是什么意思
- 一个小学题目:一秒=??毫秒
- 如何使被调用者调用调用者的类的方法?(有点拗口)请高手们帮忙呀!
- 这个TextField的显示为什么总是不完全?
1.String a = "hello";
2.String b = new String(a);
那么a和b就是两个不同的对象,
而如果把2改成:String b = a;
那么b和a就是指向同一个对象的。
在用字节数组时需要用到
String s= new String(char [])
比如:String ab="ab";String a_b="a"+"b";
那么ab==a_b;属第一种.
理由二 725137(2006年不会菜):在用字节数组时需要用到String s= new String(char []).
其实这一条是可以扩展的,也就是说需要参数的时候还是要用new String的.还有什么其他的情况必须要用吗?<Effective JAVA>第4条是什么了, 这本书我没读过, 能简单解释一下吗?
In situations where you know you are creating a small substring and then throwing the large string away, force a copy of the string to be created by calling new String(substring). This seems counter-intuitive from a performance perspective because it creates extra objects, but it can be worthwhile if the substring is being retained for a long period. In one particular case in the Eclipse JDT plugins, copying the substring yielded a 550KB space savings. Not bad for a one line fix!
还有没有其他的情况了, 我会尽快结贴.