首先要知道这里的字符都是String类对象,引用类型。==是比较两个对象的地址值。s1+s2中的加号是连接符。s3输出的是该对象,而不是该对象的地址值是因为在引用类型中输出都有个默认的toString()方法。s3==s1+s2出现错误是因为这两个对象的地址值不同。s3=="a"+"b"右边连接起来是ab字符串。再看下String s3="ab";java中有堆内存,栈内存还有方法区,方法区中有常量池,s3首先会在常量池中去找有没有ab,如果没有则会自动的创建ab。"a"+"b"又为ab,系统为了优化内存,所以这两个ab是同一个。你可以去看看内存介绍 |