Java没有运算符重载的概念。
Still +运算符的行为与带数字的加法运算符和带字符串的串联运算符相同。这类似于操作员的重载行为。
那么,Java是否有运算符重载?
是! 如您所知,运算符+
可以表示两种不同的含义,即字符串串联或数字加法。 根据定义 ,这是一个运算符重载。
以下是 所有 Java运算符的列表:
[JLS
3.12运算符](http://java.sun.com/docs/books/jls/third_edition/html/lexical.html#3.12)
以下37个标记是 运算符 ,由ASCII字符组成:
= > < ! ~ ? : == <= >= != && || ++ -- + - * / & | ^ % << >> >>> += -= *= /= &= |= ^= %= <<= >>= >>>=
其中一些运算符超载。这里有些例子:
System.out.println( 3 + 4 + "X" ); // prints "7X"
System.out.println( 3 + (4 + "X") ); // prints "34X"
System.out.println( "X" + 3 + 4 ); // prints "X34"
System.out.println( "X" + (3 + 4) ); // prints "X7"
System.out.println(0 == 0); // prints "true"
System.out.println(new Integer(0) == new Integer(0)); // prints "false"
System.out.println(true & (1 & 2) == 12); // prints "false"
绝对不! 所有Java运算符的含义均与语言规范所指定的 完全相同 。没有“额外语言”语义:Java运算符 _ 永远_
不能执行该语言未指定的操作。
也就是说, 除非更改语言 , 否则 以下是保证的事实:
someString + whatever
_ 始终_ 是字符串连接referenceType == anotherReferenceType
是 _ ALWAYS_ 参考平等3 * "a lady"
或者"my heart" / 2
甚至10**3 ~= 999
但是,如上面的代码片段所示,即使操作员超载的当前状态仍然会造成很大的混乱,尤其是对于初学者而言。通过不允许语言外的重载,至少可以限制这种混乱:一旦程序员了解了Java语言中
所有 运算符在各种重载情况下的功能,它们在 所有 Java代码中的确切语义就变得清晰而精确。
操作员重载可能会造成混乱。有人认为它已经足够“糟糕”了。为了允许用户重载Java运算符以执行语言规范之外的事情,只会导致更加混乱。
这是 Java Puzzlers 的摘录 ,《 Puzzle 30:Looper之子》 :
语言设计者的课程与[其他两个难题]相同。操作员重载可能会造成混淆。也许
+
不应该为字符串连接重载运算符。提供一个字符串连接运算符可能很值得,但不必如此+
。
不! 这有什么用它做 的一切
。Java编译器所需要做的就是根据语言的语法规则解析程序源代码,并为每个运算符确定操作数的类型。此信息足以推断出运算符的含义,然后根据语言指定采取相应的措施。
目标 了解实例化 String 对象和设置其值的多种方法 了解字符串串联和方法链 熟悉 Java 语言的算术运算符 字符串 目前为止,您已经遇到过多种类型的 String。在 Java 语言中,字符串是 String 类型的一级对象,包含可帮助您处理它们的方法。 在 C 语言中,处理字符串需要大量精力,因为它们是您必须操作的 8 位字符组成的以 null 结尾的数组。(在字符串方面,与 C 语言最
问题内容: 假设字符串a和b: 在幕后,他们是同一回事吗? 这里将concat反编译为参考。我也希望能够反编译该+运算符,以查看其作用。 问题答案: 不,不是。 首先,语义上略有不同。如果a是null,则抛出一个,但a+=b将把原来的值a就好像它是null。此外,该方法仅接受值,而+操作员会将参数无提示地转换为String(使用对象的方法)。因此,该concat()方法在接受方面更加严格。 要深入
这章我们来着重介绍一下字符串。 刚刚学习Rust的同学可能会被Rust的字符串搞混掉,比如str,String, OsStr, CStr,CString等等…… 事实上,如果你不做FFI的话,常用的字符串类型就只有前两种。我们就来着重研究一下Rust的前两种字符串。 你要明白的是,Rust中的字符串实际上是被编码成UTF-8的一个字节数组。这么说比较拗口,简单来说,Rust字符串内部存储的是一个u
问题内容: 我想将一些转换成这样的运算符: 如何将变量操作转换为运算符? 问题答案: 您可以尝试以下方法:
现在的Rust资料,无论是Book还是RustByExample都没有统一而完全的介绍Rust的操作符。一个很重要的原因就是,Rust的操作符号和C++大部分都是一模一样的。 一元操作符 顾名思义,一元操作符是专门对一个Rust元素进行操纵的操作符,主要包括以下几个: -: 取负,专门用于数值类型。 *: 解引用。这是一个很有用的符号,和Deref(DerefMut)这个trait关联密切。 !:
本章讲解 Rust 中的类型相关基础知识、运算符相关知识、和字符串的基本知识。