--- title: Basic Operations --- ## Basic Operations Java supports the following operations on variables: * __Arithmetic__ : `Addition (+)`, `Subtraction (-)`, `Multiplication (*)`, `Division (/)`, `Modulus (%)`,`Increment (++)`,`Decrement (--)`. * __String concatenation__: `+` can be used for String concatenation, but subtraction `-` on a String is not a valid operation. **In java ***+*** operator is overloaded on functionality to concatenate strings and to perform addition information** * __Relational__: `Equal to (==)`, `Not Equal to (!=)`, `Greater than (>)`, `Less than (<)`, `Greater than or equal to (>=)`, `Less than or equal to (<=)` **Always remember sign of greater and less than always come before assign i.e "="** * __Bitwise__: `Bitwise And (&)`, `Bitwise Or (|)`, `Bitwise XOR (^)`, `Bitwise Compliment (~)`, `Left shift (<<)`, `Right Shift (>>)`, `Zero fill right shift (>>>)`. **Bitwise operators are used to perform bitwise operation in places where calculation on binary numbers are required like-in ciphers,and to design virtual electronic circut replication etc. ** * __Logical__: `Logical And (&&)`, `Logical Or (||)`, `Logical Not (!)` * __Assignment__: `=`, `+=`, `-=`, `*=`, `/=`, `%=`, `<<=`, `>>=`, `&=`, `^=`, `|=` * __Others__: `Conditional/Ternary(?:)`, `instanceof` **Ternary because it work on the functionality of If Then Else i.e If condition is right then first alternative anotherwise the second one ** While most of the operations are self-explanatory, the Conditional (Ternary) Operator works as follows: `expression that results in boolean output ? return this value if true : return this value if false;` The Assignment operators (`+=`, `-=`, `*=`, `/=`, `%=`, `<<=`, `>>=`, `&=`, `^=`, `|=`) are just a short form which can be extended. Example: (`a += b`) does the same thing as (`a = a + b`)! Example: True Condition: ```java int x = 10; int y = (x == 10) ? 5 : 9; // y will equal 5 since the expression x == 10 evaluates to true ``` False Condition: ```java int x = 25; int y = (x == 10) ? 5 : 9; // y will equal 9 since the expression x == 10 evaluates to false ``` The `instanceof` operator is used for type checking. It can be used to test if an object is an instance of a class, a subclass or an interface. General format- *object **instance** of class/subclass/interface* Here is a program to illustrate the `instanceof` operator: ```Java Person obj1 = new Person(); Person obj2 = new Boy(); // As obj is of type person, it is not an // instance of Boy or interface System.out.println("obj1 instanceof Person: " + (obj1 instanceof Person)); /*it returns true since obj1 is an instance of person */ ``` ### Operation of ASSIGNMENT Operators explained: Often times students come across questions in exam/quizes involving complex equations/relations between different variables established with different combinations of assignmen operators. On face, they look preety ambiguous. But follwoing a simpe rule might make solving them preety straigh forward. The rule itself is simple... On any circumstance, first one must deal with PRE-operations, then 'Assignment' operator and then finally comes with 'POST - operations'. In summary, the order of operation is - Step 1. PRE-operations Step 2. Assignment Step 3. POST - operations. For example: ```java int a = 1; int b; int b = a-- + ++a ; ``` What will be the value of a & b after the program compiles? Step 1. PRE-operations: a is assigned value 1. Upon pre-assignment, it becomes 2(since it is '+' here) Step 2. Assignment: At this point, a = 2 and for b , b =a-- + ++a or, b = 2-- + 2 = 4. [Note:POST - operations has not yet come to play yet] Step 3. POST - operations: At this point, b = 4 a = 2. But WAIT, there's still one 'post operation' on a to deal with... i.e. a-- So it follows: ```java a-- // 2-- = 1 (since it is '-' here). ``` Again, consider this example: ```java int num1 = 10; int num2 = 0; int num3 = 4; int num4 = 6; num3 = ++num1 - num4++; ``` What will be the value of num3 & num4 ? ``` num3 = 5 num4 = 7 ``` # More Information - [Java Operators](https://docs.oracle.com/javase/tutorial/java/nutsandbolts/operators.html) - [Summary of Operators](https://docs.oracle.com/javase/tutorial/java/nutsandbolts/opsummary.html)