用 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是不安全的?有害的?
隐藏的危机在哪里如何改正
而不是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是不安全的?有害的?
隐藏的危机在哪里如何改正
而不是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还没涉及,关注!
但是上面我贴出来的源代码在JDK1.4调试通过
没有问题
问题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
*/
一个是字符串常量,一个是堆内存分配。
这个时候也要创建一个string类对象,对象的内容是hello,
s是一个引用,s指向那个对象
是这样吗?(2) String s = new String(“hello”);
在堆里面动态分配内存,s是一个引用,指向
这个堆里面创建出来的对象
是这样吗?
两者区别何在?