public class myClass1 {
public static void main(String[] arg)
{
String str1=new String("1");//1)
String str2=new String("1");//2)
String str3="1"; //3)
String str4="1"; //4)
while(true)
{
}
}}
请问运行完4内存里有几个“1”
执行这几条语句时jvm都怎么分配的内存.为什么3)会自动产生一个新的“1”,而4)不会?
public static void main(String[] arg)
{
String str1=new String("1");//1)
String str2=new String("1");//2)
String str3="1"; //3)
String str4="1"; //4)
while(true)
{
}
}}
请问运行完4内存里有几个“1”
执行这几条语句时jvm都怎么分配的内存.为什么3)会自动产生一个新的“1”,而4)不会?
解决方案 »
- JAVA文件输入输出
- 请问哪个类可以在一个指定的区域里面显示图像,用什么方法
- 关于frameview和panel的问题
- 如何在java中读入bmp图像数据阿???高手请进!
- 关于javascript的document.all函数的一点问题
- 在平台jade上运行java程序(jade封装)
- oracle:无法从套接字读取更多数据
- 哪里有关于工程网络图中关键路径算法的详细描述?
- java并发问题
- jdbc的问题:java.sql.SQLException: Illegal operation on empty result set.
- sql语句中包含like的时候,怎样对参数setString?
- 请教一个多线程问题
所以:(1)新建一个String对象
(2)新建一个String对象
(3)新建一个String对象
(4)引用已有的(3)试试这个:
public class StringTest2 {
public static void main(String[] arg)
{
String str1=new String("1");//1)
String str2=new String("1");//2)
String str3="1"; //3)
String str4="1"; //4) if(str1 == str2)
System.out.println("str1 == str2");
else
System.out.println("str1 != str2");
if(str3 == str1)
System.out.println("str3 == str1");
else
System.out.println("str3 != str1");
if(str3 == str2)
System.out.println("str3 == str2");
else
System.out.println("str3 != str2");
if(str3 == str4)
System.out.println("str3 == str4");
else
System.out.println("str3 != str4");
}
}
结果:
str1 != str2
str3 != str1
str3 != str2
str3 == str4
String str2=new String("1").intern();//2)
强制new时先查找内部列表。
执行3)时String引用列表里已经有两个“1”了吧,那3)为什么不直接引用,而有产生了一个新的“1”呢?
String str2=new String("1").intern();//2)
强制new时先查找内部列表。" 在改成这种的情况下,
我预想的是str1在应用列表中存在“1”了,
而str2查应用列表的话就不该在产生一个“1”了
只是返回一个引用,str1和str2应该相等(str1==str2 为true),
而程序实际运行却不相等。
其实上面是先在内部建立了一个"1"字符串,然后把它作为参数传递到一个新的String对象的构造函数中。"
能讲细一点吗?或者告诉我在哪可以找到想关的信息或关键字。