A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

String s = “abc”;String  s1 = “abc;System.out.println(s = s1);输出结果是什么?

11 个回复

倒序浏览
是true 字符串存储在字符串常量池,如果两个一样就存储一个
回复 使用道具 举报
确定你是想打=而不是==?
如果是=就是先赋值后打印,就是s里的内容
如果是==就是比较的结果true,为什么是true楼上说的很对
如果s与s1其中有一个是通过Scanner录入的数,那么就是false。用s.equlse(s1)的结果才是true
回复 使用道具 举报
可可TKD 来自手机 中级黑马 2016-3-27 11:54:00
板凳
你确定是赋值还是比较?
回复 使用道具 举报
如果你的题目没有写错 的话,,是abc,System.out.println(s = s1);就是打印s啊,因为s1赋值给s,s的值还是abc,
回复 使用道具 举报
首先,不是很明白楼主的意思,暂且有两种理解 (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
回复 使用道具 举报
结果是编译错误    字符串定义都出错了   还纠结什么赋值号    搞不懂楼上的
回复 使用道具 举报
ture,两个指向的是同一地址
回复 使用道具 举报
输出是abc
回复 使用道具 举报
abc  ·······
回复 使用道具 举报
abc啊。。。。
回复 使用道具 举报
这题真有点难,不是我这个菜鸟能解决了的
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马