Java 运算符和方法之间的区别是什么?
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。如果你对这种比较感兴趣,为什么不试试呢?即使是您的测试也显示“+
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()”方法那样创建对象吗?