今天看到一篇文章(下面给出原文链接),对作者的错误理解予以纠正。
http://www.blogjava.net/DoubleJ/archive/2008/03/09/184860.html
public static void main(String[] args) {
Object x = "Buy";
String i = "Effective Java!";
x = x + i;
x+=i; //为什么这行会报错呢
}
x = x + i;没有错,因为当有任何对象和String相加时,该对象都被转换成String后(即调用该
对象的toString()方法)再执行相加操作,所以该操作相当于x = x.toString() + i;,这样相加
后的结果(String类型对象)被上塑赋给Object类型对象x,这些都是被允许的。
而+=操作是把右边操作对象类型先转换成左边操作对象类型,即x+=(Object)i;,然而Object类没
有+=操作符,因此,该操作不被允许。
关键:+=操作是把右边操作对象类型先转换成左边操作对象类型(类类型转换成String),再作相加操作。
//例1
Short s = 5;
s += 8;
System.out.println(s.getClass()); //class java.lang.Short
s = s + 8; //Error:connot convert from int to Short
//例1分析
s += 8;先把8(int类型)转换成Short类型,相加后仍是Short类型。
s = s + 8;会根据Java的低类型向高类型转换原则(提升原则)(类型由高到低double、float、long、int、short、byte),把s转换成int类型,s = (int)s + 8;,这样就会把计算结果(int类型)赋给Short类型对象s,这是不被允许的。
//例2
Integer s = 5;
s += 5.6;
System.out.println(s); //10
System.out.println(s.getClass()); //class java.lang.Integer
s = s + 5.5; //Error:connot convert from double to Short
s = s + (int)5.553159;
System.out.println(s); //15
System.out.println(s.getClass()); //class java.lang.Integer
s = (int)(s + 5.553159);
System.out.println(s); //20
System.out.println(s.getClass()); //class java.lang.Integer
//例2分析和例1一样
分享到:
相关推荐
在C#编程语言中,`+=`操作符是一种非常常见的语法结构,用于简化代码并提高可读性。本文将深入探讨`+=`操作符的重载,以及如何在自定义类型中实现它,以增强其功能和灵活性。 首先,`+=`操作符的基本用途是将值类型...
在编程语言中,`+=` 和 `++` 是两种常见的操作符,它们在处理变量时有不同的功能和行为。本文将详细介绍这两个操作符的区别,并通过示例进行解释。 首先,`+=` 是复合赋值操作符,它将右侧的值与左侧的变量相加,...
`+=` 和 `-=` 操作符在委托上下文中用于添加或移除事件处理程序。本文将深入探讨这两个操作符在处理委托时的具体行为,以及它们如何影响委托的多播特性。 首先,让我们澄清一下委托的基本概念。C#中的委托可以被视...
- **`+=` 连接符**:这个操作符通常用于累加或追加元素。对于可变序列类型(如列表),`+=` 将会在原地修改对象,而不是创建一个新的对象。这意味着使用 `+=` 追加元素时,原始对象会被直接修改。 #### 示例分析 ...
本课程设计的重点在于构建一个编译器,它能处理特定的控制流结构和算术运算符,如REPEAT语句、DOWHILE条件、ELSE语句以及自增/自减操作符(++、--)和复合赋值操作符(+=、-=)。这些是编程语言的基础元素,理解它们...
这个例子展示了如何通过重载操作符`+`、`*`、`+=`和`*=`来使得自定义的`Integer`类支持这些运算。 首先,我们创建了一个名为`Integer`的类,它有一个整型成员变量`i`。类中有四个成员函数,每个都是为了重载不同的...
在这个实例研究中,我们聚焦于`std::string`类的一个关键特性:重载操作符`+=`,这个操作符用于连接两个字符串。 在C++中,重载操作符是一种机制,允许我们为已有的运算符赋予新的含义,以适应不同的数据类型。`+=`...
预增操作符 `++i` 则会在使用 `i` 之前增加其值。 此外,标签“代码”表明这是一个关于编程实践的讨论,可能是在学习或者解决某个编程问题的过程中遇到的。在这种情况下,理解变量的赋值和自增操作对于编写正确的...
`++`和`--`是自增和自减操作符,允许变量在赋值时直接增加或减少1;`+=`和`-=`是复合赋值运算符,使得赋值操作更为简洁。 其次,扩展了条件语句的ELSE子句。在原版PL/0中,`IF`语句仅支持条件表达式,而没有提供与...
- `+=` 操作符向一个变量的值的列表中添加一个值。 - `-=` 操作符从一个变量的值的列表中移去一个值。 - `*=` 操作符仅当一个值不存在于一个变量的值的列表中的时候,把它添加进去。 - `~=` 操作符替换任何与指定的...
2. **赋值操作符**:用于将一个值赋给变量,例如`=`, `+=`, `-=`等。例如: ```java a = b; // 将b的值赋给a a += b; // 等同于 a = a + b ``` 3. **比较操作符**:用于比较两个值,如`==`(等于)、`!=`(不等于)...
在C++编程语言中,操作符重载是一种重要的特性,它允许我们为自定义类型定义已有的运算符的行为。操作符重载并不意味着创建新的运算符,而是为现有的运算符...理解并熟练掌握操作符重载,对于提升C++编程水平至关重要。
5. **复合赋值操作符**(+=, -=, *=, /=, %=):组合赋值操作符的重载通常涉及一个自增或自减操作。 四、注意事项 1. **不要滥用操作符重载**:虽然操作符重载很强大,但过度使用可能会使代码难以理解,降低可读性...
7. 赋值操作符:=、*=、/=、%=、+=、-=、<<=、>>=、&=、^=、|= 8. 条件操作符:?: 9. 逗号操作符:, 结合性 C++操作符的结合性指的是在多个操作符同时出现时,它们的执行顺序。C++语言中,操作符的结合性有两种:...
C++还提供了复合赋值操作符,如 `+=`、`-=`、`*=`、`/=` 和 `%=`,它们结合了赋值和算术操作,如 `a += b` 相当于 `a = a + b`。 三、比较操作符 比较操作符用于比较两个值,并返回一个布尔结果。这些操作符包括...
它引入了一种新的处理异步数据流的方式,通过观察者模式和一系列操作符,简化了事件处理和数据管理。本教程将针对初学者,详细介绍如何入门RxJava2.0以及常用的操作符,并对其实现原理进行简要分析。 首先,让我们...
理解操作符的用法和优先级对于编写高效、准确的代码至关重要。本文将详细解析Java中的主要操作符及其应用。 首先,我们来看算术操作符。算术操作符包括加法(+), 减法(-), 乘法(*), 除法(/)和模运算符(%)。例如,"5 ...
1. `+=`:这个操作符将右侧的值加到左侧变量的当前值上,然后将结果赋值回左侧变量。例如,`var num = 5; num += 3` 等价于 `num = num + 3`,在这里`num`的值变为`8`。 2. `-=`:与`+=`类似,但它减去右侧的值。`...
C++还允许复合赋值操作符,如`+=`, `-=`等,它们可以简化代码并减少错误。例如,`a += 2;`等同于`a = a + 2;`,这会将a的当前值与2相加,然后将结果重新赋给a。同样,`a -= 5;`表示`a = a - 5;`,`a *= b;`表示`a = ...