大侠将下面的程序的输出结果详细的解释一下
public class StringTest
{
public static void main(String[] args)
{
String str1 = new String("abc");
String str2 = new String("abc");
String str3 = "bcd";
String str4 = "bcd";
if(str1 == str2)
{
System.out.println("str1==str2");
}
else {
System.out.println("str1!=str2");
}
if(str3 == str4)
{
System.out.println("str3==str4");
}
else
{
System.out.println("str3!=str4");
}
str1 = "bcd";
System.out.println("after str1 = \"bcd\"");
if(str1 == str3)
{
System.out.println("str1==str3");
}
else {
System.out.println("str1!=str3");
}
}
}
public class StringTest
{
public static void main(String[] args)
{
String str1 = new String("abc");
String str2 = new String("abc");
String str3 = "bcd";
String str4 = "bcd";
if(str1 == str2)
{
System.out.println("str1==str2");
}
else {
System.out.println("str1!=str2");
}
if(str3 == str4)
{
System.out.println("str3==str4");
}
else
{
System.out.println("str3!=str4");
}
str1 = "bcd";
System.out.println("after str1 = \"bcd\"");
if(str1 == str3)
{
System.out.println("str1==str3");
}
else {
System.out.println("str1!=str3");
}
}
}
解决方案 »
- 人机猜拳游戏求助~~~~
- 多个数组 选出相同的数 简单算法
- 这段程序到底是锁定的那个对象?
- 关于父类引用指向子类对象,到底优点在哪里?老师描述的很抽象
- 有谁用过jvmti对Java Class文件加密吗
- swt的文档哪里有,就是类似于javadoc的文档
- 如何以某个字符为标记(如“;”)来读入一个文件?每次读入两个";"号中间的一段内容?
- 高手快来!我编的applet用appletviewer能看但是用浏览器看就不行!
- 请帮我看看这段代码错在什么地方?谢谢
- 请问如何把Applet默认的从屏幕上放向下放生长的Y坐标变成从下向上生长的?
- 大家帮我看一下哪里有错
- JfreeChart实现的柱状图和甘特图(回一送六)高分(在线)
String str1 = new String("abc");//新构造一个String对象,将"abc"放到里面
String str2 = new String("abc");//再新构造一个String对象,将"abc"放到里面
String str3 = "bcd";//jvm在堆中新建一个String对象,值为"bcd",str3与str4都是他的引用。
String str4 = "bcd";
if (str1 == str2) {//比较的的两个String对象是不是相同,由于两个对象都是new出来的,那肯定不一样,
//只是里面放的东西是一样的,就像你的保险箱和我的保险箱都放一模一样的宝石,
//但你的保险箱跟我的保险箱他不是同一个
System.out.println("str1==str2");//输出此
} else {
System.out.println("str1!=str2");
}
if (str3 == str4) {
System.out.println("str3==str4");//输出此
} else {
System.out.println("str3!=str4");
}
str1 = "bcd";
System.out.println("after str1 = \"bcd\"");
if (str1 == str3) {//str1转为对 "bcd"的引用,与str3一样,也与str4一样;str1 == str3 == str4
System.out.println("str1==str3");//输出此
} else {
System.out.println("str1!=str3");
}
String str1 = new String("abc");//新构造一个String对象,将"abc"放到里面
String str2 = new String("abc");//再新构造一个String对象,将"abc"放到里面
String str3 = "bcd";//jvm在堆中新建一个String对象,值为"bcd",str3与str4都是他的引用。
String str4 = "bcd";
if (str1 == str2) {//比较的的两个String对象是不是相同,由于两个对象都是new出来的,那肯定不一样,
//只是里面放的东西是一样的,就像你的保险箱和我的保险箱都放一模一样的宝石,
//但你的保险箱跟我的保险箱他不是同一个
System.out.println("str1==str2");
} else {
System.out.println("str1!=str2");//输出此
}
if (str3 == str4) {
System.out.println("str3==str4");//输出此
} else {
System.out.println("str3!=str4");
}
str1 = "bcd";
System.out.println("after str1 = \"bcd\"");
if (str1 == str3) {//str1转为对 "bcd"的引用,与str3一样,也与str4一样;str1 == str3 == str4
System.out.println("str1==str3");//输出此
} else {
System.out.println("str1!=str3");
}
好,有了这些知识就可以开始解释了public class PrintFiles
{
public static void main(String[] args)
{
String str1 = new String("abc");//new出来一个String对象,存放在堆区,由str1指向它
/*
* 又new出来一个String对象,存放在堆区,由str2指向它,
* 注意,该对象与str1指向的不是同一个对象,
* 只不过两个对象装的东西是一样的
*/
String str2 = new String("abc");
/*
* "bcd"是字符串常量,存放在数据区,在内存中只有一份,
* str3跟str4两个都指向它
*/
String str3 = "bcd";
String str4 = "bcd";
if (str1 == str2)//str1跟str2指向不同的对象,因此地址也不一样
{
System.out.println("str1==str2");
} else
{
System.out.println("str1!=str2");
}
if (str3 == str4)//str3跟str4指向相同的对象,因此地址也一样
{
System.out.println("str3==str4");
} else
{
System.out.println("str3!=str4");
}
str1 = "bcd";//让str1指向数据区的字符串常量"bcd"
System.out.println("after str1 = \"bcd\"");
if (str1 == str3)//现在str1跟str3指向相同的对象了,因此地址也一样
{
System.out.println("str1==str3");
} else
{
System.out.println("str1!=str3");
}
}再两外举个例子public class StringTest
{
public static void main(String[] args)
{
String a = "bcd";//"bcd"在代码区,a指向它
MyClass my = new MyClass();//在堆区new出来一个对象,my指向它
if (a == my.s)//a跟my.s指向的是同一个对象,地址相同
{
System.out.println("s == my.s");
}
}
}class MyClass
{
String s = "bcd";//"bcd"在代码区,s指向它
}
/*运行结果:
* s == my.s
*/
String str4 = "bcd"别的参考三楼