| The tables below group the Java operators according to similar 
              actions. For newcomers to Java, you can just scan these tables for 
              now, especially for operations dealing with class and objects, and 
              then refer back to them as you encounter more of the language. Most of the operators are fairly straightforward but there can 
              be subtle details in their implementation that you must understand. 
              For example, you must know the difference in the pre- 
              and post-increment operations with regard to when the operation 
              executes versus when the value of the operand value returns. We will return to many of these operators as the course proceeds.  
              General Properties 
                of Operators In Java, an expression 
                carries out some operation or operations that are directed by 
                a list of allowed operators. An operator acts upon one, two or 
                three operands. Here are some general properties of operators:  
              Operands An operand can be:  
              
                a numeric variable - integer, 
                  floating point or character 
                any primitive type variable - 
                  numeric and boolean 
                reference variable to an object
 
                a literal - numeric value, boolean 
                  value, or string. 
                an array element, "a[2]" 
                char 
                  primitive, which in numeric operations is treated as an unsigned 
                  two byte integer  
              The operator is unary if it acts on a single operand; 
                binary if it requres two operands. The conditional 
                operator is the only ternary operator in Java. Each operator places specific requirements on the operand types 
                allowed. For example, the subtractive operator "- " 
                in x=a-b; requires 
                that a and b variables be numeric types. The assignment 
                operator "=" then requires that x also be a numeric 
                type. (If a and b were wider types than x, a casting 
                operation would also be required.) Returned Value A value is "returned" at the completion of an operation. 
                The following statements use the assignment 
                operator "=" and the addition 
                operator "+" 
                
  
                and result in x holding the value 3 and y holding the value 
                  8. The entire expression y= x+5 could be used in another expression: 
                   int 
                  x=3;int y;
 int z = (y=x+5) * 4;
  
              
              
              which results in y holding 8 and z holding 32. The assignment 
              operator  "=" in the expression "y=x+5 " 
              produces a new value for y and also returns  the value of 
              y to be used in the expression for z. 
               Effects on Operands In most of the operations, the operands themselves are not changed. 
                However, for some operators, the operand(s) do undergo a change: 
               
               
                Assignment 
                  operators: "x=y " 
                  replaces the value of the first operand with that of the second. 
                  The other assignment operators, "*=, 
                  += , etc" will also replace the value of the first 
                  operand but only after using its initial value in the particular 
                  operation indicated by the symbol before the =  
                  sign.
                  
                Increment & 
                decrement operators: The operand is incremented 
                or decremented, before or after the operand's value is returned, 
                depending on whether it is a pre- or post- increment of decrement.  
              If an operand is changed by the operation, note 
                that if the statement holding that expression is processed again, 
                e.g. in a loop, the resulting value can be different for each 
                pass.  Expression 
                Evaluation The operands of an operator are always evaluated 
                left to right. For example, in     x 
                = a + b; the first "+" 
                operator will determine the value of a 
                and then b. Do not get this rule confused with the precedence 
                and associativity rules.   
              For example, in the expression    x 
                = a + b * c; the first "+" 
                operator still first determines its left operand ("a" 
                in this case) and then its right operand. But in this case the 
                right operand consists of the expression "b*c". 
                The multiplication operator "*" 
                has a higher precedence than the additive "+". 
               Precedence can be overridden with parentheses, e.g.    x 
                = (a + b) * c; will force the addition of b 
                to a, and then 
                this sum is multiplied by c. 
               Although the precedence ratings, which are similar 
                to those in C/C++, were chosen for the most "natural" 
                ordering of the operator evaluations, it never hurts to use the 
                parentheses if you are unsure of the precedence and don't have 
                the table handy.  When the operations in an expression all have the 
                same precedence rating, the associativity rules determine 
                the order of the operations. For most operators, the evaluation 
                is done left to right, e.g.    x 
                = a + b - c; Here, addition and subtraction have the same precedence 
                rating and so a 
                and b are added 
                and then from this sum c 
                is subtracted. Again, parentheses can be used to overrule the 
                default associativity, e.g.     x 
                = a + (b - c); However, the assignment and unary operators, are 
                associated right to left, e.g.    x 
                += y -= -~4; is equivalent to     x 
                += (y -= (-(~4))); or in long hand,     int 
                a = ~4;a = -a;
 y = y - a;
 x = x + y;
 Other 
                Operator Tricks Finally, here are some other miscellaneous notes 
                about operators. As indicated in the last example above, assignment 
                operations can be chained:    x 
                = y = z = 4; with the evaluations proceeding right to left.  Assignments can be combined into other operations, 
                to compact the code, e.g.     if( 
                (x = 5) == b) y = 10; which first sets x 
                to 5, then returns that value for the test of b. 
                You should not overuse this technique else it makes the code unreadable. 
                Occasionally, though, it can be a neat approach. 
 Tables 
                of Java Operators 
                 
                  | Assignment 
                      Operators   x 
                      operation= y is equivalent to
 x 
                      = x operation y
 x and y must be numeric or 
                      char types except for "=", which allows x and y also to 
                      be object references. In this case, x must be of the same 
                      type of class or interface as y. If mixed floating-point 
                      and integer types, the rules for mixed types in expressions 
                      apply.  |   
                  | = | Assignment 
                    operator. x 
                    = y;
 y is evaluated and x set to this value.
 The value of x is then returned.
 |   
                  |  +=, 
                      -=, *=, /=, %= | Arithmetic operation and then assignment, 
                      e.g.x 
                      += y;
 is equivalent to
 x 
                      = x + y;
 |   
                  | &=, |=, ^= | Bitwise 
                    operation and then assignment, e.g. x 
                    &= y;
 is equivalent to
 x 
                    = x & y;
 |   
                  | <<=, 
                    >>=, >>>= | Shift 
                    operations and then assignment, e.g. x 
                    <<= n;
 is equivalent to
 x 
                    = x << n;
 |   
                
                 
                  | 
                      Arithmetic 
                        Operators   x and y are numeric or 
                        char types. If mixed floating-point and integer types, 
                        then floating-point arithmetic used and a floating-point 
                        value returned. If mixed integer types, the wider type 
                        is returned. If double and float mixed, double is returned. |   
                  |     x 
                      + y | Addition |   
                  | x - y | Subtraction |   
                  | x 
                    * y | Multiplication |   
                  | x 
                    / y | Division If FP arithmetic and y = 0.0, then infinity returned if x 
                    is not zero, NaN if x is zero.
 ArthmeticException thrown if x & y are integer types and 
                    y is zero.
 |   
                  | x 
                    % y | Modulo 
                    - remainder of x/y returned. If FP arithmetic and y = 0.0 or infinity,
 then NaN returned
 ArthmeticException thrown if x & y are integer types and 
                    y is zero.
 |   
                  | -x | Unary 
                    minus Negation of x value
 |    
                 
                  | Increment 
                    & Decrement Operators x and y are numeric (FP & integer) 
                    or char types.
 |   
                  |    x++ | Post-increment : add 1 to the value.The value is returned before the increment is made, 
                      e.g.
 x 
                      = 1;
 y = x++;
 Then y will hold 1 and x will hold 2
 |   
                  | x-- | Post-decrement : subtract 1 from the value.The value is returned before the decrement is made, 
                      e.g. :
 x 
                      = 1;
 y = x--;
 Then y will hold 1 and x will 
                      hold 0.
 |   
                  | ++x | Pre-increment : add 1 to the value.The value is returned after the increment is made, 
                      e.g.
 x 
                      = 1;
 y = ++x;
 Then y will hold 2 and x will 
                      hold 2.
 |   
                  | --x | Pre-decrement : subtract 1 from the value.The value is returned after the decrement is made, 
                      e.g.
 x 
                      = 1;
 y = --x;
 Then y will hold 0 and x will 
                      hold 0.
 |    
                 
                  | Boolean 
                      Operators 
 x and y are boolean types. 
                      x and y can be expressions that result in a boolean value. 
                      Result is a boolean true 
                      or false 
                      value.
 |   
                  | x 
                    && y | Conditional AND
 | If both 
                    x and y are true, result is true. If either x or y are false, the result is false
 If x is false, y is not evaluated.
 |   
                  | x 
                    & y | Boolean AND
 | If both 
                    x and y are true,the result is true. If either x or y are false, the result is false
 Both x and y are evaluated before the test.
 |   
                  | x 
                    || y | Conditional OR
 | If either 
                    x or y are true, the result is true. If x is true, y is not evaluated.
 |   
                  | x 
                    | y | Boolean OR
 | If either 
                    x or y are true, the result is true. Both x & y are evaluated before the test.
 |   
                  | !x | Boolean NOT
 | If x 
                    is true, the result is false. If x is false, the result is true.
 |   
                  | x 
                    ^ y | Boolean XOR
 | If x 
                    is true and y is false, the result is true. If x is false and y is true, the result is true.
 Otherwise, the result is false.
 Both x and y are evaluated before the test.
 |     
              
                 
                  | Comparison 
                      Operators   x and y are numeric 
                      or char types only except for "==" and "!=" 
                      operators, which can also compare references. If mixed types, 
                      then the narrower type converted to wider type. Returned 
                      value is boolean true 
                      or false. |   
                  | x < 
                      y | Is x 
                    less than y ? |   
                  | x 
                    <= y | Is x 
                    less than or equal to y ? |   
                  | x 
                    > y | Is 
                    x greater than y ? |   
                  | x 
                    >= y | Is x 
                    greater than or equal to y ? |   
                  | x 
                    == y | Is x 
                    equal to y ? |   
                  | x 
                    != y | Is x 
                    not equal to y ? |     
              
                 
                  | Bitwise 
                      Operators    x and y are integers. 
                      If mixed integer types, such as int 
                      and long, 
                      the result will be of the wider type. 
 Note: Operations on byte 
                      and short types may give unexpected 
                      results since operands are promoted to integers during intermediate 
                      operations. For example,
 
   byte x = (byte)0xFF;x >>>= 1;
will result in 0xFF in x rather 
                      than 0x7F. That is because the 
                      operation is carried out on a signed integer rather than 
                      simply on 8 bits. Here the signed byte is promoted to the 
                      signed integer 0xFFFFFFFF.
 
 Use of an integer would go as follows:
 
   int i = 0xFF;i >>>= 1;
This results in 0x7F 
                      in the variable i.
 |   
                  |    ~x | Compliment | Flip each bit, ones 
                    to zeros, zeros to ones |   
                  | x 
                    & y | AND | AND 
                    each bit a with corresponding bit in b |   
                  | x 
                    | y | OR | OR each 
                    bit in a with corresponding bit in b |   
                  | x 
                    ^ y | XOR | XOR 
                    each bit in x with corresponding bit in y |   
                  | x 
                    << y | Shift 
                    left | Shift 
                    x to the left by y bits. High order bits lost. Zero bits fill in right bits.
 |   
                  | x 
                    >> y | Shift 
                    Right - Signed
 | Shift 
                    x to the right by y bits. Low order bits lost. Same bit value as sign (0 for positive numbers, 1 for negative) 
                    fills in the left bits.
 |   
                  | x 
                    >>> y | Shift 
                    Right - Unsigned
 | Shift 
                    x to the right by y bits. Low order bits lost. Zeros fill in left bits regardless of sign.
 |    
              
                 
                  | Class 
                    and Object Operators |   
                  | x 
                    instanceof c | Class 
                    Test Operator | The first operand must be an object reference.c is the name of a class or interface.
 If x is an instance of type c or a subclass of c, then true 
                      returned.
 If x is an instance of interface type c or a sub-interface, 
                      then true 
                      is returned.
 Otherwise, false 
                      is returned.
 |   
                  |    new 
                      c(args)  | Class Instantiation
 | Create 
                    an instance of class c using constructor c(args) |   
                  | "." | Class 
                    Member Access | Access 
                    a method or field of a class or object : o.f 
                    - field access for object o
 o.m() 
                    - method access for object o
 |   
                  | () 
                       | Method 
                    Invocation | Parentheses 
                    after a method name invokes (i.e. calls) the code for the method, e.g.
 o.m()
 o.m(x,y)
 |   
                  | (c) | Object Cast
 | Treat 
                    an object as the type of class or interface c: c 
                    x=(c)y;
 Treat y as an instance of class or interface c
 |   
                  | + | String 
                    Concatenation | This binary operator will concatenate one 
                      string to another. E.g.   String 
                      str1 = "abc";String str2 = "def";
 String str3 = str1 + str2
 results in str3 
                      holding "abcdef". 
                       For mixed operands, if either a or b in 
                      (a + b) is a string, concatenation to a string will occur. 
                      Primitives will be converted to strings and the toString() 
                      methods of objects will be called. (This is the only case of operator overloading 
                      in Java.)  Note that the equivalence operator "+=" 
                      will also  perform string concatenation.  |   
                  | [] | Array 
                    Element Access | In Java, arrays are classes. However, the 
                      bracket operators work essentially the same as in the C/C++. 
                       To access a given element of an array, place 
                      the number of the element as an int 
                      value (long 
                      values cannot be used in Java arrays) into the brackets, 
                      e.g.   float 
                      a = b[3];int n = 5;
 char c=c[n];
 where b 
                      is a float 
                      array and c 
                      is a char array. |    
              
                 
                  | Other 
                    Operators |   
                  | x=boolean?y:x | Conditional Operator
 | The 
                    first operand - boolean - is a boolean variable or 
                    expression. First this boolean operand is evaluated. If it is true 
                    then the second operator evaluated and x is set to that value.
 If the boolean operator is false, 
                    then the third operand is evaluated and x is set to that value.
 |   
                  | (primitive 
                    type) | Type 
                    Cast | To assign a value of one primitive numeric 
                      type a more narrow type, e.g. long to int, an explicit cast 
                      operation is required, e.g.            long 
                      a = 5;int 
                      b = (int)a;
 |    
              
                 
                  | Operator 
                      Precedence    The larger the number, 
                      the higher the precedence.  |   
                  | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |   
                  | =*=
 /=
 %=
 +=
 -=
 <<=
 >>=
 >>>=
 &=
 ^=
 |=
 | ?: | || | && | | | ^ | &
 | == !=
 
 | < <=
 >
 >=
 | << >>
 >>>
 | + -
 | * /
 %
 | new (type)
 | ++x --x
 +x
 -x
 ~
 !
 | . []
 (args)
 x++
 x--
 |   
                  | Notes: 
                      (type) 
                        refers to the casting operator "." is the object member access 
                        operator[] 
                        is the array access operator(args) 
                        indicates the invocation of a method.
In column 11, the + and - refer to binary 
                        addition and subtraction. Also, the + refers tothe string 
                        append operator. Whereas in column 14, the + & - refer 
                        to the unary operations +x 
                        and -x 
                        specify the sign of the value.  |, ^, 
                        and & 
                        refer to both the bitwise and boolean operators. |     
              
                 
                  | Operator 
                      Associativity   The following operators 
                      have Right to Left associativity. All other operators 
                      (see precedence table above) are 
                      evaluated left to right. |   
                  | =*=
 /=
 %=
 +=
 -=
 <<=
 >>=
 >>>=
 &=
 ^=
 |=
 | ?: new
 (type cast)
 ++x
 --x
 +x
 -x
 ~
 !
 |    References & Web Resources 
             Latest update: May 22, 2008 |