42

Java の単項プラス演算子は、C++ を介して C から来たようです。

int result = +1;   

以下の効果があるようです。

  • オペランドがラッパー オブジェクトの場合、ボックス化を解除します
  • オペランドをにプロモートします (まだより広くintない場合)int
  • 多数の連続するプラス記号を含む邪悪な式の解析が少し複雑になります

これらすべてを行うためのより良い/より明確な方法があるように私には思えます。

このSO questionでは、C# の対応する演算子について、「必要に応じてオーバーロードするためにある」と誰かが言いました。

ただし、Java では、どの演算子もオーバーロードできません。では、この単項プラス演算子は、C++ に存在したという理由だけで Java に存在するのでしょうか?

4

7 に答える 7

48

int単項プラス演算子は、オペランドの型がbytechar、またはの場合にへの自動変換を実行しますshort。これは単項数値昇格と呼ばれ、次のようなことが可能になります。

char c = 'c';
int i = +c;

確かに、それは用途が限られています。しかし、それには目的があります。仕様、特にセクション§15.15.3および§5.6.1を参照してください。

于 2010-04-12T18:52:29.990 に答える
6

わかりませんが、(明らかに必要な)単項マイナス演算子との対称性のためにそこにあるのではないかと思います。

于 2010-04-12T18:35:10.460 に答える
3

Javaの設計目標の1つは、(C / C ++開発者に)精通することでした。したがって、このようなオペレーターに関しては、Javaを除外する強い理由が必要であり、それを必要とする正当な理由ではないと確信しています。 。

于 2010-04-12T19:50:22.963 に答える
2

私の推測では、プラスを入力すると物事が明確になることがあるので、そこにあると思います。負の数ではなく、正の数があるという事実を強調したい場合があります。

また、それが使用されている現実世界の例を提供するために、世界の一部の地域では、正の温度には常にプラスが付けられる傾向があります.

于 2010-04-12T18:50:31.933 に答える
2

他の多くの言語には単項プラスがあります。それを含めるのが通例であり、それを除外するのはペニーピンチです。コンパイラでは数行しかありません。

于 2010-04-13T07:40:23.723 に答える
-3

単項演算子は、Java に対して次のことを行います。

  • +単項プラス演算子。は正の値を示します (ただし、これがなくても数値は正です)
  • -単項マイナス演算子。式を否定します
  • ++インクリメント演算子; 値を 1 ずつ増やします
  • --デクリメント演算子; 値を 1 減らします
  • !論理補数演算子。ブール値を反転します

ソース: https://docs.oracle.com/javase/tutorial/java/nutsandbolts/opsummary.html

于 2016-09-28T01:32:14.160 に答える