Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 运算符和方法之间的区别是什么?_Java_Operator Keyword - Fatal编程技术网

Java 运算符和方法之间的区别是什么?

Java 运算符和方法之间的区别是什么?,java,operator-keyword,Java,Operator Keyword,Java中运算符和方法的求值规则有什么区别?运算符可以看作是 static Foo Plus (Foo right, Foo left) { // do stuff return output; } 编写right+left而不是Class更方便。另外(right,left)在C和Java中,您不能重写类的“+”运算符,因此您的问题对于其他语言来说是有意义的 有一些语言可以在操作符中重写,比如C++和Python。如果你对这种比较感兴趣,为什么不试试呢?即使是您的测试也显示“+

Java中运算符和方法的求值规则有什么区别?

运算符可以看作是

static Foo Plus (Foo right, Foo left)
 {
   // do stuff
   return output;
 }

编写
right+left
而不是
Class更方便。另外(right,left)

在C和Java中,您不能重写类的“+”运算符,因此您的问题对于其他语言来说是有意义的

<>有一些语言可以在操作符中重写,比如C++和Python。如果你对这种比较感兴趣,为什么不试试呢?即使是您的测试也显示“+”运算符比.add()方法慢/快。如果您更改编译器或环境,这可能会改变

我想你应该用一些对你来说合适的东西


Java中有人建议使用
StringBuffer
来代替
+
操作符和
String
但是最新的Java实现对
+
操作符进行了更好的优化,所以这个建议对于新代码来说不是很好;我想详述一下

操作符(通常)是硬连接到语言中的:像
+
-
*
/
这样的东西通常由编译器直接翻译成机器语言(如果这是语言系统的底层机制的话),而不需要在库中显式调用方法。例如,在C语言中就是这样。如果这些运算符没有在语言中定义,那么您必须编写
加(2,2)
而不是
2+2

在该语言中定义的运算符具有内置优先级的优点<代码>*和
/
通常比
+
-
具有更高的优先级,因此您可以编写
3*3+4*4
并获得25,而不是52或84,而无需这样的优先级或不同的优先级

当编译器识别出运算符但仍将其委托给库时,该行将变为一点灰色。FORTRAN中的复数就是一个例子:编译器通常不会费心将复杂的操作直接编译成机器代码,而是生成机器代码来调用库

大多数人只想到算术运算符,比如
+
-
等等。但是您也可以考虑方括号(<代码> []/COD>)数组索引操作符,例如:

有些语言允许您重载它们的运算符,因此您可以用对方法的调用替换运算符通常执行的任何操作


大多数语言不允许您定义自己的运算符,这些运算符支持与内置运算符相同的机制。Scala在这里是个例外;如果愿意,可以定义
++
运算符,并将其连接到您提供的方法。有些人认为运算符重载使代码更难理解,所以这是否是一个好主意还没有定论。

我将对您提出的问题进行不同的猜测。例如,您可能会问,Java对以下两种情况下执行
bar()
baz()
的顺序有何保证:

foo.bar() + foo.baz()
fee(foo.bar(), foo.baz())

在这两种情况下,
bar()
肯定是在
baz()
(JLS 15.7.1,4)

之前被调用的。您的问题在C或Java中都没有意义。有相当多的语言允许运算符重载(使用方法或函数,或以您如何称呼它)。C和Java都不在其中。例如,C++和Python是.@格雷戈:我只想知道java中如何评估操作符和方法。许多运算符可以由编译器映射到简单的机器语言操作,因此编译器直接执行此操作。另一方面,方法通常编译为调用该方法的代码的机器语言翻译,除非编译器已内联该方法。@JamesKPolk,但它在c#中是有意义的。我阅读了插图CSharp 2012,在第8章作者说:“运算符是表示返回单个结果的操作的符号”.一点也不,如果你把“+”看作一个方法,那么它属于哪个类?要像“toString()”方法那样创建对象吗?