java字符串数组

String[]str=newString[4];System.out.println(str.equals(str));//为什么输出是trueSystem.out.p... String [] str = new String[4];
System.out.println(str.equals(str)); // 为什么输出是 true
System.out.println(new String[3].equals("null"));// 为什么,输出是 false
System.out.println(new String[3].equals(null));// 为什么,输出是 false

这两个输出false的怎么改才能变为true
new String[3].equals(null) 比较的到底是什么?
是内容,还是字符串地址,还是三个数组数组元素都比较了?

而且我知道比较的是内容!但是
String [] s2 = new String[3];
String [] s3 = new String[3];
System.out.println(s2.equals(s2)); // true
System.out.println(s2.equals(s3)); // false
System.out.println(s2.equals(null)); // false
System.out.println(s2.equals("null")); // false
System.out.println(s2.equals("")); // false
System.out.println(s2.equals('\u0000'));// false
System.out.println(s2.equals(0)); // false
System.out.println(s2.equals("0")); // false
System.out.println(new String[3].equals(new String[3]));// false
System.out.println(new String[3].equals("null")); // false
System.out.println(new String[3].equals(null)); // false
System.out.println(new String[3].equals("")); // false
......

楼下的回答的都不全面啊,回答的好我追加分15
hao32863
char数组初始值是 '\u0000' 和本题无关啊!!!
对象数组 s2 的元素默认值是 null 啊,
可否帮我输出true??再追加分
展开
 我来答
25754257X
2011-01-09 · TA获得超过294个赞
知道答主
回答量:66
采纳率:0%
帮助的人:41.2万
展开全部
import java.util.Arrays;
public class Txe {
public static void main(String[] args) {

//new java.lang.String [3];
//在堆中分配一个String类对象的空间,并将该对象的地址堆入操作数栈。

String [] s1 = new String[4];
String [] s2 = new String[4];
String [] s3 = new String[4];
System.out.println("0:"+s1); //<输出的是s1的地址>
System.out.println("1:"+s1.equals(s1)); // 为什么输出是 true <s1的地址与s1的地址比较,地址是相同的。>
System.out.println("2:"+new String [3].equals("null"));// 为什么,输出是 false <用一个地址与一个字符串比较>
System.out.println("3:"+new String[3].equals(null));// 为什么,输出是 false <地址与值比较>
System.out.println("4:"+new String[3]);//<输出地址>

s1[1]="a";
System.out.println("5:"+s1[3]);
System.out.println("6:"+s1[1].equals("a"));
//5,6是我自己忘记了,测试用的,汗!

System.out.println("7:"+s2+" "+s3);//<输出两个地址>
System.out.println("8:"+s2.equals(s3)); // <地址不同>
System.out.println("9:"+Arrays.equals(s2,s3));//<这个才是数组值与值的比较,注:我前面导入了Array包。>

System.out.println("10:"+new String[3].equals(new String[3])); // false<每重新分配一次地址都会不一样>
}

}

结果:
0:[Ljava.lang.String;@192d342
1:true
2:false
3:false
4:[Ljava.lang.String;@6b97fd
5:null
6:true
7:[Ljava.lang.String;@1c78e57 [Ljava.lang.String;@5224ee
8:false
9:true
10:false

你写了这道题第七分钟时我就看到了。
不过,用了这么久时间,我才稍稍有点点弄明白,找了N多的资料,问了N多的人。
希望对你有帮助。
hao32863
2011-01-09 · TA获得超过299个赞
知道小有建树答主
回答量:173
采纳率:0%
帮助的人:141万
展开全部
这么跟你说吧,equals 比较的内存单元中的内容是否相同,而==比较的是指向内存单元的引用,也就是equals比较的是堆中的内容,而==比较的是栈,一个新的数组在你给他初始化之前,数组的值全都是0,所以,System.out.println(new String[3].equals("null"));// ,输出是 false
System.out.println(new String[3].equals(null));// 输出是 false

重点:
字符元素被初始化为‘\u0000’,而对于对象数组都被初始化为null
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
LoveBabyDRR
2011-01-09 · 超过12用户采纳过TA的回答
知道答主
回答量:45
采纳率:0%
帮助的人:32.2万
展开全部
楼主,你好:
squals()比较的是字符串里的 地址是否指向同一个,指地址 ~~~~~~~~~~~~~~~~~~
显然第一个是指向自己,显然为TRUE,而第二个指向另一个数组,第三个指向空对象,所以都为FLASE,当且仅当指向自己的时候采为TRUE。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
Big嘴
2011-01-09 · TA获得超过4097个赞
知道小有建树答主
回答量:697
采纳率:50%
帮助的人:633万
展开全部
字符串是一个比较特殊的对象。
字符串之所以特殊,是因为java会在内容中为String类型的对像开辟一个空间,我们叫他串池!
字符串对象的创建之后会被放入到串池中。
串池有一个特点,就是对于相同对象,池中只存储一份。
那么串池把神马样的String看做是相同的String呢。请看:
String a="abc";和String b="abc" 对于这样的类型的声明方式(不是new出来的)串池把他们看做一个对象,所以池中只存储一分,只是有a 和b 两个引用罢了!
对于String只要用new关键字new出来的string,都是单独的一个对象。
而“==”号,他是用来比较对象的内存地址,所以只要用==号来比较string,只要不是自己比自己,那肯定是false。
而String中的equls方法已经做了处理,他是比较内容,所以要比较string的内容的时候而不是地址的时候,那就用它吧!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式