用 String s = “hello”;
   而不是String s = new String(“hello”);
为什么呢?内存分配不同?执行效率不同?
第一种生成对象,分配栈内存
第二种声称对象方式,在堆里面分配内存?
====================================
问题2
public class intList{
public int value;
public intList tail;
public intList(int value,intList tail){
this.value = value; this.tail = tail;
}
public static void main(String args[])
{
intList p1,p2,p3;
p1 = new intList(3,null);
p2 = p1;
p2 = new intList(5,null);
p1.tail = p2;
p1.tail.value += 1;
display(p1);
incList(p1);
System.out.println("\nAfter invoke incList function:");
display(p1);
p3=deincrList(p1,10);
System.out.println("\nAfter invoke deincrList function:");
display(p3);
}
public static void display(intList head)
{
while(head!=null)
{System.out.print("-->"+head.value);
  head=head.tail;
}
}
public static void incList(intList head)
{
while(head!=null)
{
head.value=head.value+1;
head=head.tail;
}
}
//!!!destructive operation
public static intList deincrList(intList p,int n)
{
    for ( intList h =p;h!=null;h=h.tail)
h.value += n;
    return p;
}}
为什么说最后一个方法public static intList deincrList是不安全的?有害的?
隐藏的危机在哪里如何改正

解决方案 »

  1.   

    用 String s = “hello”;
       而不是String s = new String(“hello”);
    ======================================================================
    String 类型的变量都是对象变量,也就是都在堆里.第一种表示方法是string的特有的用法,string s1="hello",and string s2="hello",有相同的内存地址.但是String s1 = new String(“hello”);和String s2 = new String(“hello”);的内存地址不同.
    ===
    问题2还没涉及,关注!
      

  2.   

    问题2的程序是软件学院一个老师的ppt里面的
    但是上面我贴出来的源代码在JDK1.4调试通过
    没有问题
    问题1呢?
      

  3.   

    问题1答案:
    public class StrCmp {
    public static void main(String[] args) {
    String s1="hello";
    String s2="hello";
    System.out.println(s1==s2);
    String s3=new String("hello");
    String s4=new String("hello");
    System.out.println(s3==s4);
    }
    }
    /*
    output:
    true
    false
    */
    一个是字符串常量,一个是堆内存分配。
      

  4.   

    String s1 = new String(“hello”);和String s2 = new String(“hello”);的内存地址是相同的。
      

  5.   

    (1)用 String s = “hello”;
    这个时候也要创建一个string类对象,对象的内容是hello,
    s是一个引用,s指向那个对象
    是这样吗?(2)  String s = new String(“hello”);
    在堆里面动态分配内存,s是一个引用,指向
    这个堆里面创建出来的对象
    是这样吗?
    两者区别何在?