黑马程序员技术交流社区
标题:
String s = “abc”;String s1 = “abc;
[打印本页]
作者:
徐选伟Shirwee
时间:
2016-3-27 10:15
标题:
String s = “abc”;String s1 = “abc;
String s = “abc”;String s1 = “abc;System.out.println(s = s1);输出结果是什么?
作者:
715596417
时间:
2016-3-27 11:24
是true 字符串存储在字符串常量池,如果两个一样就存储一个
作者:
赵浩霖
时间:
2016-3-27 11:45
确定你是想打=而不是==?
如果是=就是先赋值后打印,就是s里的内容
如果是==就是比较的结果true,为什么是true楼上说的很对
如果s与s1其中有一个是通过Scanner录入的数,那么就是false。用s.equlse(s1)的结果才是true
作者:
可可TKD
时间:
2016-3-27 11:54
你确定是赋值还是比较?
作者:
zhoubinjian
时间:
2016-3-27 12:47
如果你的题目没有写错 的话,,是abc,System.out.println(s = s1);就是打印s啊,因为s1赋值给s,s的值还是abc,
作者:
hkh3321313
时间:
2016-3-27 15:37
首先,不是很明白楼主的意思,暂且有两种理解 (1) 把"="理解为赋值运算符 (2)把"="理解为"=="(比较运算符)
对于第一种情况,上代码:
class Demo1 {
public static void main(String[] args) {
String s = "abc";
String s1 = "abc";
System.out.println(s=s1);
}
}
运行结果:
abc
对于第二种情况,代码如下:
class Demo2 {
public static void main(String[] args) {
String s = "abc";
String s1 = "abc";
System.out.println(s==s1);
}
}
运行结果:
true
其实这种涉及了一个比较复杂的问题.
字符串是一个比较特殊的对象。
字符串之所以特殊,是因为java会在内容中为String类型的对像开辟一个空间,我们叫他串池!
字符串对象的创建之后会被放入到串池中。
串池有一个特点,就是对于相同对象,池中只存储一份。
那么串池把什么样的String看做是相同的String呢。请看:
String a="abc";和String b="abc" 对于这样的类型的声明方式(不是new出来的)串池把他们看做一个对象,所以池中只存储一分,只是有a 和b 两个引用罢了!
对于String只要用new关键字new出来的string,都是单独的一个对象。
而“==”号,他是用来比较对象的内存地址,所以只要用==号来比较string,只要不是自己比自己,那肯定是false。
实际上,String中的equls方法已经做了处理,这个方法是用于比较内容,所以要比较string的内容的时候而不是地址的时候,那就用它吧!
下面给出一个例子:
public class Demo3{
public static void main(String[] args){
String S1=new String("abc");
String S2="abc";
String S3="abc";
String S4=new String("abc");
System.out.println(S1==S2);
System.out.println(S2==S4);
System.out.println(S2==S3);
System.out.println(S1==S4);
}
}
运行的结果是:
false
false
true
false
作者:
monZhang
时间:
2016-3-27 21:32
结果是编译错误 字符串定义都出错了 还纠结什么赋值号 搞不懂楼上的
作者:
马儿不吃草
时间:
2016-3-27 21:55
ture,两个指向的是同一地址
作者:
妄想年少轻狂
时间:
2016-3-27 22:01
输出是abc
作者:
604840337
时间:
2016-3-27 22:02
abc ·······
作者:
Man_hui
时间:
2016-3-27 22:58
abc啊。。。。
作者:
小流氓
时间:
2016-3-27 23:03
这题真有点难,不是我这个菜鸟能解决了的
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2