String a="abcd"; String b="ab"+"cd"; System.out.println(a==b);

返回的结果为什么是true,两者的值一样我明白,但是返回的地址是也是一样的么?
String a="abcd";
StringBuffer c = new StringBuffer("ab");
c.append("cd");
System.out.println(a.equals(c))

其中a和c的值都是“abcd” ,为什么返回的值是false?

第1个回答  2014-04-11
string stringbuff 存放地址不一样,
public static void main(String[] args) {
String a="abcd";
StringBuffer c = new StringBuffer("ab");
c.append("cd");
System.out.println(a.equals(c.toString()));
}
这就一样了本回答被提问者和网友采纳
第2个回答  2014-04-11
字符串常量是储存在数据区的,数据区只要equals,地址就相等追问

String a="abcd";
StringBuffer c = new StringBuffer("ab");
c.append("cd");
System.out.println(a.equals(c))

其中a和c的值都是“abcd” ,为什么返回的值是false?

追答

只要是new出来的都放在堆内存中,a指向的地址在数据区,而c指向堆内存,他两的内地址不一样,所以是FALSE

第3个回答  2014-04-11
StringBuffer 最后有一步操作是 new String()
第4个回答  2017-08-10
虽然很久前的了,我还是回答下。a==b比较的是a和b的内存地址,而a.equals(c)比较的是a和c的值,所以前一个返回值是false,而后一个是true。

...b = "a" + "b"; System.out.println(a==b); 的内存图解是怎样的...
栈中一个a,字符串常量池中一个"ab"。a指向"ab"。栈中一个b,b指向字符串常量池的"ab"。"a" + "b"这个会有一个运算的过程,现在jdk1.5以后在编译器有个优化,会自动吧+替换成StringBuilder的append,运算之后会把“ab”的引用返给b。然后“a”,"b"会被回收。

...String c = a+b; System.out.println("ab"==c);
“ab”是新的匿名对象,所以返回的是false。java中==比较的是变量的地址,就好像C中的指针,指针地址一样就返回true的,你这是两个不同的String对象,肯定地址不同了。如果要比较内容就用equals方法。

java 一条输出语句输出多个值
我表示如果你是初学者来问这个问题的话,直接把System.out.println(???);,改为:System.out.println("i="+i+"&j="+j);就可以了,因为JAVA的输出连接必须用“+”号连接,其他的和C语言相同的。

java最后输入System.out.println("a="+a+",b="+b);那么括号中是啥意思...
所以这里System.out.println() 方法就是在 console窗口上,打印上面的字符串 例如:int a = 1;double b = 1.5;System.out.println("a="+a+",b="+b);在console窗口上就会显示:a=1,b=1.5

java 一条输出语句输出多个值
这是一个字符串拼接问题,可以是System.out.println("i="+i+",j="+j);其中括号里 "i="表示直接输出 i=这两个字符 后面的 + 表示连接一个变量。你可以这么理解("i=")(i)(",j=")(j) +号就是为了连接这些括号一起输出。

java subtring( )用法
str.substring(int begin,int end); 从字符串开始位置截取到结束位置,前包含,后不包含!String sql = "abcdefg";String a = sql.substring(0,4);System.out.println(a);结果:abcd 下标从0开始

java中使用System.out.println如何输出多个变量?
方法为:System.out.println(变量一+变量二+变量三+... +变量N)。至于将数值转换为String类型,有个简单的方法,即在每个数值后加上[ +“”] 中括号中的部分即可,如下面代码:如下面代码:int i=0;int j=0;nt k=0;int l=0;System.out.println(i+""+j+""+k+""+l);这样就输出的...

JAVA中怎么把string类型的变量的一部分赋值给另一个string变量
1.String temp = "abcdefg";\/\/将abc赋值给str String str = temp.substring(0, 2);\/\/0表示所要截取的第一个字符下标,2表示最后一个。2.String temp = "abcdefg";\/\/将c后面的全部给str String str = temp.substring(3);\/\/3表示开始截取的第一个字符下标。

Java中将一个对象赋值给另一个同类对象,这两个对象是否指向同一堆内存...
b.add("b");System.out.println(a);\/\/output:[a,b]这里边的a、b就是同一地址;但是有赋值的则不会如此:String a="a";String b=a;b="b";System.out.println(a);\/\/output:a这里边b的引用虽然指向了a但是后来的赋值让它指向了新的地址,改变的不是原来地址的值;所以a没有改变。

一个字符串abcd,随机组合,最快排列出所有可能性
字符串abcd的全排列Java程序如下:public class Permutation { public void perm(char[] c,int start,int end) { if(start==end) { for(int i=0;i<=end;i++) { System.out.print(c[i]); } System.out.println(); } else { for(int i=start;i<=end;i+...

相似回答