Java代码
下面的java程序打印结果是什么?Java代码
public class AnimalFarm{
public static void main(String[] args){
final String pig = "length: 10";
final String dog = "length: "+pig.length();
System.out.println("Animal are equal:" +pig == dog);
}
}
对这个程序进行表面分析后,可能会认为它应该打印Animal are equal: true。毕竟,pig和dog都是final的String类型变量,他们都被初始化为字符串序列“length:10”。换句话说,被pig和dog引用的字符串是且永远是彼此相等的。然而,==操作符并不测试两个对象是否相等,它测试的是两个对象的引用是否相同。在本例中,他们并非引用到同一个对象。
String类型的编译期常量是内存限定的,任何两个String类型的常量表达式,如果指定的是相同的字符序列,那么他们就用同一个对象引用来表示。如果常量表达式来初始化pig和dog,那么他们确实会指向相同的对象,但是dog并不是常量表示式初始化的,既然语言已经对在常量表达式中允许出现的操作做了限制,而方法调用又不在其中,那么,这个程序就应该打印 Animal are equal: false。
实际上仍然不对,运行该程序,就会发现它打印的只是false,并没有其他的东西。它没有打印Aniaml are equal:,它怎么不打印这个字符串常量呢?毕竟要打印它才是正确的,+操作符在这里出现了问题,不论式用着将加法还是字符串链接操作,它都比==操作符优先级高,应此,println方式的参数实际上式按照下面的方式计算的:
Java代码
System.out.println(("Animal are equal:"+pig)==dog);
这个布尔表达式的值当然是false有一个能够避免此类错误的方式,在使用字符串连接操作符时候,总是将不平凡的操作时用括号括起来。
如果可以的话,你的代码应该很少依赖于字符串常量的内存限定机制。
在比较对象引用的时候,应该优先使用equals方法而不是==操作符,除非需要比较的是对象的标识而不是对象的值。很明显,在按照以上原则修改之后,它将打印true:
Java代码
System.out.println("Animal are equal:" +pig.equals(dog));
分享到:
相关推荐
根据给定的信息,“物理高考状元笔记 必修2”这一标题和描述暗示了这份资料主要聚焦于高中物理必修课程中的第二部分,并且是针对中国高考备考的学生所编写的高质量学习资料。通常这类资料会涵盖重要的概念、公式、...
教育世家状元卷五年级下册数学人教版.pdf
必修2主要涉及立体几何初步和解析几何初步。立体几何要求学生具备空间想象能力,理解点、线、面的关系,以及平面与立体的性质。解析几何则是将几何问题转化为代数问题来解决,如直线方程和圆的方程。 必修3涵盖了...
根据给定的文件标题“物理高考状元笔记 必修1”以及描述和标签中的关键词,我们可以推断出这些笔记主要涵盖了高中物理必修1课程的关键知识点。虽然具体内容以图片形式呈现无法直接引用,但可以基于标题及描述推测该...
2. 高考状元的关注度:社会普遍对高考状元抱有高度关注,因为他们被视为地区教育水平的象征,同时也是学校教学质量的体现。状元的出现能为学校带来声誉和潜在的生源优势。 3. 状元的偶然性:由于高考状元是由特定...
《赶考状元 v6.1.4:教育学习新里程》 赶考状元,作为一款专为教育学习设计的应用程序,v6.1.4版本的发布无疑为广大学子提供了一个全新的学习平台,旨在提升学习效率,助力考试成功。这款应用集成了多种功能,覆盖...
教育世家状元卷四年级下册数学冀教版.pdf
根据给定的信息,“物理高考状元笔记 选修3-2”,这部分内容主要涉及的是高中物理选修3-2部分的核心知识点。由于提供的具体内容仅有图片标识而无实际的文字内容,这里将依据选修3-2的一般教学大纲来展开讨论相关的...
公考状元笔记-资料分析水印版.pdf
2. 词汇学习方法:由于词汇量是英语学习的关键,笔记中可能包括记忆单词的策略,比如词根词缀记忆法、联想法、语境记忆法等。同时,可能会有重点词汇的列表以及如何使用这些词汇的示例。 3. 阅读理解技巧:江苏高考...
教育世家状元卷一年级下册语文五四制.pdf
2. **多重主题的构建**:标题中的“多重主题”暗示了小说并非单一的情节线,而是通过多个层面的故事线索,展现人物的内心世界和社会的多元面貌。这些主题可能包括爱情、亲情、友情、个人追求与社会责任之间的冲突等...
高中数学状元笔记(手写版) 高中数学状元笔记(手写版)是一份针对高中数学教学的笔记资料,旨在帮助学生更好地学习和掌握高中数学知识。以下是笔记的详细知识点: 高中数学的重要性 高中数学是高中阶段的必修...
教育世家状元卷六年级下册数学北师版.pdf
教育世家状元卷五年级下册英语人教PEP版.pdf
2. **图形用户界面(GUI)设计**:程序的界面美观是其一大亮点,这涉及到Java的Swing或JavaFX库的使用。开发者可能利用这些库创建了各种组件,如按钮、文本框、图片显示区域等,以实现交互式的用户界面。 3. **事件...
教育世家状元卷五年级下册语文部编版.pdf
教育世家状元卷五年级下册数学北师版.pdf
教育世家状元卷三年级下册语文部编版.pdf
教育世家状元卷六年级下册语文部编版.pdf