<?xml version="1.0"?>
<clause number="14.2" title="Operators">
  <paragraph>Expressions are constructed from operands and operators. The operators of an expression indicate which operations to apply to the operands. Examples of operators include +, -, *, /, and new. Examples of operands include literals, fields, local variables, and expressions. </paragraph>
  <paragraph>There are three kinds of operators: <list><list_item> Unary operators. The unary operators take one operand and use either prefix notation (such as -x) or postfix notation (such as x++). </list_item><list_item> Binary operators. The binary operators take two operands and all use infix notation (such as x + y). </list_item><list_item> Ternary operator. Only one ternary operator, ?:, exists; it takes three operands and uses infix notation (c ? x : y). </list_item></list></paragraph>
  <paragraph>The order of evaluation of operators in an expression is determined by the precedence and associativity of the operators (<hyperlink>14.2.1</hyperlink>). </paragraph>
  <paragraph>The order in which operands in an expression are evaluated, is left to right. <example>[Example: For example, in F(i) + G(i++) * H(i), method F is called using the old value of i, then method G is called with the old value of i, and, finally, method H is called with the new value of i. This is separate from and unrelated to operator precedence. end example]</example> Certain operators can be overloaded. Operator overloading permits  user-defined operator implementations to be specified for operations where one or both of the operands are of a user-defined class or struct type (<hyperlink>14.2.2</hyperlink>). </paragraph>
</clause>
