Operator | Definition | Precedence | Associativity |
---|---|---|---|
[] | Accessing Array | ||
() | Methods calls | 0(Highest) | Left-to-Right |
. | Access Object Members | ||
expression++ | Post-Increment | ||
expression-- | Post-Decrement | ||
--expression | Pre-Decrement | ||
++expression | Pre-Increment | 1 | Right-to-Left |
! | Logical Not | ||
~ | Bitwise Negation | ||
+ | Unary Addition | ||
- | Unary Subtraction | ||
() | Type-Casting | ||
new | Creating Object | 2 | Right-to-Left |
* | Arithmetic Multiplication | ||
/ | Arithmetic Division | 3 | Left-to-Right |
% | Modulus Operator | ||
+ | Arithmetic Addition | ||
- | Arithmetic Subtraction | 4 | Left-to-Right |
+ | String Concatenation | ||
<< | Bitwise Left Shift | ||
>> | Bitwise Sign Right Shift | 5 | Left-to-Right |
>>> | Bitwise Unsigned Right Shift | ||
< | Relational less than | ||
<= | Relational less than or equal | ||
> | Relational greater than | 6 | Left-to-Right |
>= | Relational greater than or equal | ||
instanceof | Object comparison | ||
== | Relational is equal to | ||
!= | Relational is not equal to | 7 | Left-to-Right |
& | Bitwise AND | 8 | Left-to-Right |
^ | Bitwise XOR | 9 | Left-to-Right |
| | Bitwise OR | 10 | Left-to-Right |
&& | Logical AND | 11 | Left-to-Right |
|| | Logical OR | 12 | Left-to-Right |
?: | Ternary Operator | 13 | Right-to-Left |
= | Assignment | ||
+= | Addition Assignment | ||
-= | Subtraction Assignment | ||
*= | Multiplication Assignment | ||
/= | Division Assignment | 14 | Right-to-Left |
%= | Modulus Assignment | ||
<<= | Left-Shift Assignment | ||
>>= | Signed Right-Shift Assignment | ||
>>>= | Unsigned Right-Shift Assignment | ||
, | Comma | 15(Lowest) | Right-to-Left |
Increment Decrement Operators
Operator | Definition | Associativity |
---|---|---|
expression++ | Post-Increment | |
expression-- | Post-Decrement | Right-to-Left |
--expression | Pre-Decrement | |
++expression | Pre-Increment |
int i = 10, j = 20, k = 30, l = 40;
int x;
x = i++; //x = 10 post-increment after this statement i value is 11.
x = j--; //x = 20 post-decrement after this statement j value is 19.
x = ++k; //x = 31 pre-increment and k value is also 31.
x = --l; //x = 39 pre-decrement and l value is also 39.
int a = 100;
int p = ++a - a++ //a = 102 and p = 0
int x;
x = i++; //x = 10 post-increment after this statement i value is 11.
x = j--; //x = 20 post-decrement after this statement j value is 19.
x = ++k; //x = 31 pre-increment and k value is also 31.
x = --l; //x = 39 pre-decrement and l value is also 39.
int a = 100;
int p = ++a - a++ //a = 102 and p = 0
Since associativity is Right-to-Left and precedence of ++ is higher than -.
p = 101 - 101
a = 102
p = 101 - 101
a = 102
p = 0
int m = 100;
int n = ++m - m++ + m++ //m = 103 and n = 102
Arithmetic Operators
Operator | Definition | Precedence | Associativity |
---|---|---|---|
* | Arithmetic Multiplication | ||
/ | Arithmetic Division | 3 | Left-to-Right |
% | Modulus Operator | ||
+ | Arithmetic Addition | ||
- | Arithmetic Subtraction | 4 | Left-to-Right |
+ | String Concatenation |
int x = 5 + 6 - 4 + 9 - 14;
Step 1: 11 - 4 + 9 - 14
Since associativity of + and - are Left-to-Right and first Addition and Subtraction is evaluated because their precedence is higher than assignment.
Since associativity of + and - are Left-to-Right and first Addition and Subtraction is evaluated because their precedence is higher than assignment.
Step 2: 7 + 9 - 14
Step 3: 16 - 14
Step 4: 2
Shift Operators
Shift Operators:
- Left Shift ( << )
- Right Shift ( >> )
- Unsigned Right Shift ( >>> )
package com.java.basics;
public class ShiftOperator {
public static void main(String[] args) {
int x = 1;
//Binary representation for negative number
//11111111111111111111111111111111
System.out.println(Integer.toBinaryString(~x + 1));
//Left shift 16
System.out.println(x << 4);
//80000000
System.out.println(Integer.toHexString(x << 31));
//Right shift
int y = 0xff;
System.out.println(y >> 4); //15
System.out.println(-y >> 4); //-16
System.out.println((~y + 1) >> 4); //-16
System.out.println(-y >>> 30); //3
System.out.println((~y + 1) >>> 30); //3
}
}
public class ShiftOperator {
public static void main(String[] args) {
int x = 1;
//Binary representation for negative number
//11111111111111111111111111111111
System.out.println(Integer.toBinaryString(~x + 1));
//Left shift 16
System.out.println(x << 4);
//80000000
System.out.println(Integer.toHexString(x << 31));
//Right shift
int y = 0xff;
System.out.println(y >> 4); //15
System.out.println(-y >> 4); //-16
System.out.println((~y + 1) >> 4); //-16
System.out.println(-y >>> 30); //3
System.out.println((~y + 1) >>> 30); //3
}
}
Equality and Relational Operators
Operator | Definition | Precedence | Associativity |
---|---|---|---|
< | Relational less than | ||
<= | Relational less than or equal | ||
> | Relational greater than | 6(Higher) | Left-to-Right |
>= | Relational greater than or equal | ||
instanceof | Object comparison | ||
== | Relational is equal to | ||
!= | Relational is not equal to | 7(Lower) | Left-to-Right |
Precedence of relational operators is higher than equality operators.
Relational and equality expressions either evaluate to true or false.
int a = 25, b = 26, c = 25;
a > b //false since 25 is not less than to 26
a < b //true since 25 is less than 26
a >= c //true since 25 is greater than or equal to 25
a <= b //true since 25 is less than or equal to 26
String str = "Shyam";
str instanceof String //true since str object is instance of String class.
a == c //true since 25 is equal to 25
a == b //false since 25 is not equal to 26
a != b //true since 25 is not equal to 26
a != c //false since 25 is equal to 25
a < b //true since 25 is less than 26
a >= c //true since 25 is greater than or equal to 25
a <= b //true since 25 is less than or equal to 26
String str = "Shyam";
str instanceof String //true since str object is instance of String class.
a == c //true since 25 is equal to 25
a == b //false since 25 is not equal to 26
a != b //true since 25 is not equal to 26
a != c //false since 25 is equal to 25
Bitwise AND (&), Bitwise XOR (^), Bitwise OR (|) and Bitwise NOT (~)
A | B | A & B | A ^ B | A | B | ~A | ~B |
---|---|---|---|---|---|---|
0 | 0 | 0 | 0 | 0 | 1 | 1 |
0 | 1 | 0 | 1 | 1 | 1 | 0 |
1 | 0 | 0 | 1 | 1 | 0 | 1 |
1 | 1 | 1 | 0 | 1 | 0 | 0 |
Logical AND (&&), Logical XOR (^), Logical OR (||) and Logical NOT (!)
A | B | A && B | A ^ B | A || B | !A | !B |
---|---|---|---|---|---|---|
False | False | False | False | False | True | True |
False | True | False | True | True | True | False |
True | False | False | True | True | False | True |
True | True | True | False | True | False | False |
Conditional Operator (Ternary Operator)
Operator | Definition | Associativity |
---|---|---|
?: | Ternary Operator | Right-to-Left |
Precedence of Ternary operator (?:) is only higher than assignment and comma operators and it's associativity is from right to left.
Syntax:
result = expression ? value1 : value 2;
If the expression evaluate to true then value1 is assigned to result else value2 is assigned to result.
boolean res = 10 > 20 ? true : false;
Since 10 is not greater than 20 so false is assigned to res.
int year = 2016;
boolean isLeapYear = year % 4 == 0 && year % 100 != 0 || year % 400 == 0 ? true : false;
boolean isLeapYear = year % 4 == 0 && year % 100 != 0 || year % 400 == 0 ? true : false;
expression = year % 4 == 0 && year % 100 != 0 || year % 400 == 0
Step 1: 0 == 0 && 16 != 0 || 16 == 0
Since modulus(%) operator has highest precedence among all operators.
Step 2: true && true || false
Since next highest precedence is equality operators
Step 3: true || false
Since Logical AND (&&) has higher precedence than Logical OR (||)
Step 4: true
Assignment Operator
Operators | Definition | Associativity |
---|---|---|
= | Assignment | |
+= | Addition Assignment | |
-= | Subtraction Assignment | |
*= | Multiplication Assignment | |
/= | Division Assignment | Right-to-Left |
%= | Modulus Assignment | |
<<= | Left-Shift Assignment | |
>>= | Signed Right-Shift Assignment | |
>>>= | Unsigned Right-Shift Assignment |
int number1;
int number2;
number1 = number2 = 10;
int number2;
number1 = number2 = 10;
First 10 will assign to number2 then number2 value assign to number1 because = Associativity is Right-to-Left.
String str = "Hello World";
String literal "Hello World" is assign to str.
double d = 10.5 + 15.25;
First Addition of 10.5 and 15.25 is evaluated then the result is assign to d because + has higher Precedence than = .
long num = 111;
long num += 50 * 20;
long num += 50 * 20;
First multiplication of 50 and 20 is evaluated then the result is added to num and assign to num again because * has higher Precedence than += .
Note:
There is no space between + and = in += Operator.
No comments:
Post a Comment