`

java 陷阱 4 八两

阅读更多
问题:给出变量x和i的声明,是如下语句合法:

x = x+i;


但是这条语句不合法:

x += i;


符合复制操作要求两个操作数都是原生类型的,例如int,或包装了原生类型,例如Integer,但有一个例外:如果在+=操作符左侧的操作数是String类型的,那么它允许右侧的操作数是任意类型,在这种情况下,该操作符执行的是字符串链接操作。简单复制操作符允许其左侧的是对象引用类型,这就更宽松了:可以使用他们来表示任何你想要的内容,只要表达式的右侧与左侧的变量是赋值兼容的。

可以利用这一差异来完成问题。要想用+=操作符来执行字符串链接操作,就必须左侧的变量声明是String类型。通过使用直接赋值操作符,字符串链接的结果可以存放到一个Object类型变量中。

解决:
Object x = “Buy”;

String i = "Effective Java";


简单赋值是合法的,因为x+i是String类型,而String类型与Objcet类型兼容:
x=x+i;


复合赋值是非法的,因为左侧是Object引用类型,而右侧是String类型:

x += i;
分享到:
评论

相关推荐

    java面试中的陷阱java面试中的陷阱

    ### Java面试中的陷阱知识点解析 在Java面试过程中,面试官往往会通过一些问题来考察应聘者对Java基础知识的理解深度以及在实际编程中解决问题的能力。本文将根据提供的标题、描述及部分内容,整理并归纳出一系列...

    java陷阱--面试(题集)杂谈

    第八,GC(Garbage Collector)是Java的内存管理机制,负责自动回收不再使用的对象所占用的内存。有了GC,程序员无需手动管理内存,降低了内存泄漏的风险。 第九,`String s = new String("xyz");`创建了两个String...

    java SE(入门知识4)原生数据类型使用陷阱.docx

    在Java编程语言中,原生数据类型(primitive data type)是程序设计的基础,包括了byte、short、int、long、float、double、char以及boolean这八种。它们各自有不同的存储大小和取值范围,每种类型都有其特定的用途...

    Java面试中的陷阱

    ### Java面试中的陷阱详解 #### 一、final, finally, finalize 的区别 1. **final**:在Java中,`final`是一个关键字,用于声明一个不可更改的对象或变量。如果一个类被声明为final,那么它不能被继承;如果一个...

    java面试陷阱

    ### Java面试陷阱详解 #### 一、final, finally, finalize的区别 在Java中,`final`, `finally`, 和 `finalize` 这三个关键字虽然只相差一个字母,但在用途上却有着天壤之别。 - **final**: 这个关键字主要用于...

    Java编程中须注意的细节.pdf

    为了解决这些问题,可以参考《Java Pazzlers》(Java解惑)这本书,其中对许多常见的编程陷阱进行了深入分析。下面将详细阐述文档中提到的Java编程中应注意的几个关键细节。 1. 数值表达式中的奇偶判断 在Java中,...

    java领域四大名著

    - 本书分为两部分,《Core Java I: Fundamental Knowledge》和《Core Java II: Advanced Features》,分别针对Java的基础知识和高级特性进行了详细的介绍。 - 第一部分重点介绍了Java语言的基础语法、面向对象的...

    Java自学总结94点

    4. **基本数据类型**: - `boolean`: 8位,只有两个值:true 或 false - `byte`: 8位,范围从-128到127 - `short`: 16位,范围从-32768到32767 - `char`: 16位,表示一个Unicode字符,范围从0到65535 - `int`: ...

    Java学习必须看的书籍

    由Joshua Bloch等人编写的《Java陷阱、误区和棘手问题》旨在揭示Java语言中的隐蔽陷阱和容易导致错误的地方。本书通过一系列有趣且富有挑战性的例子,帮助读者识别并避免在实际开发过程中可能遇到的问题。通过学习...

    理解java中的基本数据类型

    本文将深入探讨Java中的八种基本数据类型:`boolean`、`byte`、`short`、`int`、`long`、`char`、`float`以及`double`,并结合实例来解释这些类型的特点及其在实际编程中的应用。 #### 1. `boolean` `boolean`类型...

    java 递归问题文档

    通过阅读“java 递归问题文档”,你可以期待学习到如何定义和使用递归函数,如何设计和分析递归算法的效率,以及如何避免常见的递归陷阱。同时,提供的练习代码将让你有机会动手实践,巩固理论知识。 总结来说,...

    java 多态 经典讲解

    #### 八、多态的陷阱:置换私有方法 在多态的场景下,私有方法不参与多态机制,因为它们不在继承链中可见。试图在子类中置换父类的私有方法会导致编译错误或运行时行为不符合预期。理解这一点对于避免潜在的bug至关...

    The Java Language Specification Java SE 7 Edition

    **4. 类型、值和变量** - **类型种类和值:**解释了Java中的不同类型(原始类型和引用类型)及其相应的值。 - **原始类型和值:**介绍了整数、浮点数、布尔值的表示方法。 - **整数类型和操作:**包括整数的表示、...

    实战java高并发程序设计源码下载

    在Java编程领域,高并发程序设计是至关重要的一个部分,特别是在大型互联网应用或者分布式系统中。...在实践中,理解并发原理、熟练掌握同步机制、合理使用线程池以及避免并发陷阱,都是Java并发编程的关键。

    java易犯错误.pdf

    Java支持两种类型转换:隐式转换(自动类型转换)和显式转换(强制类型转换)。 - **隐式转换**:例如,将一个 `int` 类型赋值给一个 `long` 类型的变量。 - **显式转换**:例如,将一个 `double` 类型的值强制转换...

    java小结

    ### Java基础知识精要 #### 一、关键字与标识符 - **关键字**: 在Java中具有...掌握了这些概念后,你可以更好地理解和编写Java代码,同时也能避免一些常见的错误和陷阱。记住,良好的编码习惯始于对基础的扎实掌握。

    java很有用的一些书籍

    这是一本充满趣味性和挑战性的书籍,通过揭示Java中一些令人惊讶的行为和陷阱,帮助读者深入理解语言的细节。作者Joshua Bloch和Neal Gafter通过一系列的谜题,展示了即使是经验丰富的开发人员也可能忽视的Java特性...

Global site tag (gtag.js) - Google Analytics