Java Programming Language
Table of content:
- History Of Java Programming Langauge
- Infographic For History Of Java
- What’s In The Name | History Of Java
- Key Features Of Java
- Advantages And Disadvantages Of Java
- The Version History Of Java Langauge
- Conclusion
- Frequently Asked Questions
Table of content:
- What Is JDK?
- How To Download Java Development Kit (JDK) For Windows, MacOS, and Linux?
- Set Environment Variables In Java
- How To Install Java (JDK) On Windows 64-Bit Machine?
- How To Install Java (JDK) On Linux?
- How To Install Java (JDK) On macOS?
- How To Test Java Installation?
- How To Write Your First Java Program On Linux OS?
- Conclusion
- Frequently Asked Questions
Table of content:
- Java Programming Language | An Introduction
- 15 Key Features Of Java
- Write Once Run Anywhere (WORA) | Features Of Java
- Java Editions
- 5 New Features Of JAVA 8
- 5 New Features Of JAVA 11
- What Makes Java Popular?
- Conclusion
- Frequently Asked Questions
Table of content:
- What is Java?
- Advantages of Java
- Disadvantages of Java
Table of content:
- What Is Java Programming?
- Role Of Integrated Development Environments (IDEs) In Java Development
- 15 Best Java IDE For Developers
- In-Depth Comparison Table
- Conclusion
- Frequently Asked Questions
Table of content:
- Key Differences Between Java And Core Java
- What Is Java?
- What Is Core Java?
- Applications Of Java
- Applications Of Core Java
- When To Use Java?
- When To Use Core Java?
- Conclusion
- Frequently Asked Questions
Table of content:
- What Are Variables In Java Language?
- How To Declare Variables In Java Programs?
- How To Initialize Variables In Java?
- Naming Conventions For Variables In Java
- Types Of Variables In Java
- Local Variables In Java
- Instance Variables In Java
- Static Variables In Java
- Final Variables In Java
- Scope and Lifetime of Variables In Java
- Data Types Of Variables In Java (Primitive & Non-primitive)
- Java Variable Type Conversion & Type Casting
- Working With Variables In Java (Examples)
- Access Modifiers & Variables In Java
- Conclusion
- Frequently Asked Questions
Table of content:
- What Are Identifiers In Java?
- Syntax Rules For Identifiers In Java
- Valid Identifiers in Java
- Invalid Identifiers in Java
- Java Reserved Keywords
- Naming Conventions & Best Practices For Identifiers In Java
- What Is An Identifier Expected Error In Java?
- Reasons The Identifier Expected Error Occurs
- How To Fix/ Resolve Identifier Expected Errors In Java?
- Conclusion
- Frequently Asked Questions
Table of content:
- What Are Data Types In Java?
- Primitive Data Types In Java
- Non-Primitive Data Types In Java
- Key Differences Between Primitive And Non-Primitive Data Types In Java
- Conclusion
- Frequently Asked Questions
Table of content:
- What Are Operators In Java?
- Types Of Operators In Java
- Unary Operators In Java
- Arithmetic Operators In Java
- Assignment Operators In Java
- Relational Operators In Java
- Logical Operators In Java
- Bitwise Operators In Java
- Shift Operators In Java
- Increment & Decrement Operators In Java
- Ternary Operator In Java
- Instanceof Operator In Java
- Precedence & Associativity Of Java Operators
- Advantages & Disadvantages Of Operators In Java
- Conclusion
- Frequently Asked Questions
Table of content:
- What Is A Return Statement In Java?
- Use Cases Of Return Statements In Java
- Returning A Value From A Method In Java
- Returning A Class Object In Java
- Returning Void (No Value) In Java
- Advantages Of Using Return Statements In Java
- Limitations Of Using Return Statements In Java
- Conclusion
- Frequently Asked Questions
Table of content:
- What Are Keywords In Java?
- List Of Keywords In Java
- Detailed Overview Of Java Keywords With Examples
- What If When Keywords In Java Are Used As Variable Names?
- Difference Between Identifiers & Keywords In Java
- Conclusion
- Frequently Asked Questions
Table of content:
- What Is Abstract Keyword In Java?
- Use Of Abstract Keyword In Java
- Abstract Methods In Java
- Abstract Classes In Java
- Advantages Of Abstract Keyword In Java
- Disadvantages Of Abstract Keyword In Java
- Abstract Classes Vs. Interfaces In Java
- Real-World Applications Of Abstract Keyword
- Conclusion
- Frequently Asked Questions
Table of content:
- What Is throws Keyword In Java?
- How Does The throws Keyword Work?
- Throwing A Checked Exception Using throws In Java
- Throwing Multiple Exceptions Using throws In Java
- Throwing A Custom Exception Using throws In Java
- When To Use The throws Keyword In Java
- Difference Between throw and throws Keyword In Java
- Best Practices For Using The throws Keyword In Java
- Conclusion
- Frequently Asked Questions
Table of content:
- What Is The Volatile Keyword In Java?
- How Does Volatile Keyword In Java Work?
- Using Volatile Keyword In Java To Control Thread Execution
- Using Volatile Keyword In Java To Signal Between Multiple Threads
- Difference Between Synchronization And Volatile Keyword
- Common Mistakes And Best Practices While Using Volatile Keyword In Java
- Conclusion
- Frequently Asked Questions
Table of content:
- Understanding Super Keyword In Java
- Super Keyword In Java With Instance Variables
- Super Keyword In Java With Method Overriding
- Super Keyword In Java With Constructor Chaining
- Applications Of Super Keyword In Java
- Difference Between This And Super Keyword In Java
- Advantages Of Using Super Keyword In Java
- Limitations And Considerations Of Super Keyword In Java
- Conclusion
- Frequently Asked Questions
Table of content:
- Understanding This Keyword In Java
- Uses Of This Keyword In Java
- Using This Keyword For Referencing Instance Variables
- Using This Keyword For Invoking A Constructor
- Using This Keyword For Invoking A Method
- Using This Keyword With Getters And Setters
- Difference Between This And Super Keyword In Java
- Best Practices For Using This Keyword In Java
- Conclusion
- Frequently Asked Questions
Table of content:
- What Is new Keyword In Java?
- Uses Of The new Keyword In Java
- Memory Management With new Keyword In Java
- Example 1: Creating An Object Of A Class Using new Keyword In Java
- Example 2: Creating An Array Using The new Keyword In Java
- Best Practices For Using new Keyword In Java
- Conclusion
- Frequently Asked Questions
Table of content:
- What Is The Transient Keyword In Java?
- Real-Life Example Of The Transient Keyword In Java
- When To Use The Transient Keyword In Java
- Example 1: Effect Of Transient Keyword On Serialization In Java
- Example 2: Skipping Sensitive Data During Serialization With Transient Keyword In Java
- Using Transient With Final Keyword In Java
- Using Transient With Static Keyword
- Difference Between Transient And Volatile Keyword In Java
- Advantages And Disadvantages Of Transient Keyword In Java
- Conclusion
- Frequently Asked Questions
Table of content:
- What Is Static Keyword In Java?
- Characteristics Of Static Keyword In Java
- Static Variables In Java
- Static Method In Java
- Static Blocks In Java
- Static Classes In Java
- Static Variables Vs Instance Variables In Java
- Advantages Of Static Keyword In Java
- Disadvantages Of Static Keyword In Java
- Conclusion
- Frequently Asked Questions
Table of content:
- What Is A Static Method In Java?
- Use Cases Of Static Method In Java
- Using Static Method In Java To Create A Utility Class
- Using Static Method In Java To Implement The Singleton Design Pattern
- Difference Between Static And Instance Methods In Java
- Limitations Of Static Method In Java
- Conclusion
- Frequently Asked Questions
Table of content:
- Understanding Final Keyword In Java
- Final Variables In Java
- Final Methods In Java
- Final Classes In Java
- Difference Between Static And Final Keyword In Java
- Uses Of Final Keyword In Java
- Conclusion
- Frequently Asked Questions
Table of content:
- Key Difference Between final, finally, And finalize In Java
- What Is final Keyword In Java?
- What Is finally Keyword In Java?
- What Is finalize Keyword In Java?
- When To Use Which Keyword In Java?
- Conclusion
- Frequently Asked Questions
Table of content:
- Understanding The extends Keyword In Java?
- Use Of extends Keyword In Java
- Using Java extends To Implement Single Inheritance
- Using Java extends With Interfaces (Default Methods)
- Overriding Using extends Keyword In Java
- Difference Between extends And implements In Java
- Real World Applications Of Extends Keyword In Java
- Conclusion
- Frequently Asked Questions
Table of content:
- What Is Decision Making Statement In Java?
- If Statement In Java
- If-Else Statement In Java
- Else-If Ladder In Java
- Switch Statement In Java
- Ternary/Conditional Operator (?:) In Java
- Best Practices For Writing Decision Making Statements In Java
- Conclusion
- Frequently Asked Questions
Table of content:
- What Are Control Statements in Java?
- Decision-Making Control Statements In Java
- Looping Control Statements In Java
- Jump (Branching) Control Statements In Java
- Application Of Control Statements In Java
- Conclusion
- Frequently Asked Questions
Table of content:
- What Is The Break Statement In Java?
- Working Of The Break Statement In Java
- Using Java Break Statement With Loops
- Using Java Break Statement With Switch Statement
- Using Java Break Statement With Infinite Loops
- Common Pitfalls While Using Break Statements In Java
- Best Practices For Using The Break Statement In Java
- Conclusion
- Frequently Asked Questions
Table of content:
- What Is Switch Statement In Java?
- Working Of The Switch Statement In Java
- Example Of Switch Statement In Java
- Java Switch Statement With String
- Java Nested Switch Statements
- Java Enum In Switch Statement
- Java Wrapper Classes In Switch Statements
- Uses Of Switch Statement In Java
- Conclusion
- Frequently Asked Questions
Table of content:
- Syntax Of main() Method In Java
- public Specifier – Main Method In Java
- static Keyword – Main Method In Java
- void Return Type Of Main Method In Java
- The main Identifier – Main Method In Java
- String[] args In Main Method In Java
- The Role Of Java Virtual Machine (JVM)
- Running Java Programs Without The Main Method
- Variations In Declaration Of Main Method In Java
- Overloading The Main Method In Java
- Conclusion
- Frequently Asked Questions
Table of content:
- What Is Method Overriding In Java?
- Example Of Method Overriding In Java
- Ideal Use Cases Of Method Overriding In Java
- Rules For Method Overriding In Java
- Super Keyword & Method Overriding In Java
- Constructor & Method Overriding In Java
- Exception Handling In Method Overriding In Java
- Access Modifiers In Method Overriding In Java
- Advantages & Disadvantages Of Method Overriding In Java
- Difference Between Method Overloading Vs. Method Overriding In Java
- Conclusion
- Frequently Asked Questions
Table of content:
- What Is Method Overloading In Java?
- Different Ways Of Method Overloading In Java
- Overloading The main() Method In Java
- Type Promotion & Method Overloading In Java
- Null Error & Method Overloading In Java
- Advantages Of Method Overloading In Java
- Disadvantages Of Method Overloading In Java
- Conclusion
- Frequently Asked Questions
Table of content:
- Difference Between Overloading And Overriding In Java (Comparison Table)
- What Is Method Overloading In Java?
- What Is Method Overriding In Java?
- Key Differences Between Overloading & Overriding In Java Explained
- Difference Between Overloading And Overriding In Java Code Example
- Conclusion
- Frequently Asked Questions
Table of content:
- What Is A One-Dimensional Array In Java?
- Key Characteristics Of One-Dimensional Arrays In Java
- Declaration Of One-Dimensional Array In Java
- Initialization Of One-Dimensional Array In Java
- Common Operations On One-Dimensional Array In Java
- Advantages Of One-Dimensional Arrays In Java
- Disadvantages Of One-Dimensional Arrays In Java
- Conclusion
- Frequently Asked Questions
Table of content:
- What Is A Multidimensional Array In Java?
- Difference Between Single-Dimensional And Multidimensional Arrays In Java
- Declaring Multidimensional Arrays In Java
- Initializing Multidimensional Arrays In Java
- Accessing And Manipulating Elements In Multidimensional Arrays In Java
- Working Of Multidimensional Arrays With Jagged Arrays In Java
- Why Use Multidimensional Arrays In Java?
- Limitations Of Multidimensional Arrays In Java
- Conclusion
- Frequently Asked Questions
Table of content:
- What Are Jagged Arrays In Java?
- Comparison With Regular Multi-Dimensional Arrays
- Declaring Jagged Arrays In Java
- Initialization Of Jagged Arrays In Java
- Printing Elements Of A Jagged Array In Java
- Accessing And Modifying Elements Of A Jagged Array In Java
- Advantages Of Jagged Arrays In Java
- Disadvantages Of Jagged Arrays In Java
- Conclusion
- Frequently Asked Questions
Table of content:
- What Is Array Of Objects In Java?
- Declare And Initialize An Array Of Object In Java
- Example Of An Array Of Objects In Java
- Sorting An Array Of Objects In Java
- Passing Arrays Of Objects To Methods In Java
- Returning Arrays Of Objects From Methods In Java
- Advantages Of Arrays Of Objects In Java
- Disadvantages Of Arrays Of Objects In Java
- Conclusion
- Frequently Asked Questions
Table of content:
- What Is A Dynamic Array In Java?
- Why Use Dynamic Array In Java?
- What Is The Size And Capacity Of A Dynamic Array In Java?
- How To Create A Dynamic Array In Java?
- Managing Dynamic Data Input In Java
- Storing And Processing Real-Time Data In Java
- Use Cases Of Dynamic Arrays In Java
- Conclusion
- Frequently Asked Questions
Table of content:
- Why Return An Array In Java?
- How To Return An Array In Java
- Example 1: Returning An Array Of First N Squares
- Example 2: Doubling the Values of an Array
- Common Scenarios For Returning Arrays In Java
- Points To Remember When Returning Arrays In Java
- Conclusion
- Frequently Asked Questions
Table of content:
- Understanding ArrayList In Java
- Differences Between Arrays And ArrayList In Java
- Returning An ArrayList In Java
- Common Use Cases For Returning An ArrayList In Java
- Pitfalls To Avoid When Returning An ArrayList In Java
- Conclusion
- Frequently Asked Questions
Table of content:
- What Is A Thread In Java?
- Thread Vs Process
- What is a Thread Life Cycle In Java?
- What Are Thread Priorities?
- Creating Threads In Java
- Java Thread Methods
- Commonly Used Constructors In Thread Class
- Thread Synchronization In Java
- Common Challenges Faced While Using Threads In Java
- Best Practices For Using Threads In Java
- Real-World Applications Of Threads In Java
- Conclusion
- Frequently Asked Questions
Table of content:
- Understanding Multithreading In Java
- Methods Of Multithreading In Java (Examples)
- Difference Between Multithreading And Multitasking In Java
- Handling Exceptions In Multithreading
- Best Practices For Multithreading In Java
- Real-World Use Cases of Multithreading In Java
- Conclusion
- Frequently Asked Questions
Table of content:
- What Is Thread Priority In Java?
- Built-In Thread Priority Constants In Java
- Thread Priority: Setter & Getter Methods
- Limitations Of Thread Priority In Java
- Best Practices For Using Thread Priority In Java
- Conclusion
- Frequently Asked Questions
Table of content:
- What Is Thread Synchronization In Java?
- The Need For Thread Synchronization In Java
- Types Of Thread Synchronization In Java
- Mutual Exclusion In Thread Synchronization In Java
- Coordination Synchronization (Thread Communication) In Java
- Advantages Of Thread Synchronization In Java
- Disadvantages Of Thread Synchronization In Java
- Alternatives To Synchronization In Java
- Deadlock And Thread Synchronization In Java
- Real-World Use Cases Of Thread Synchronization In Java
- Conclusion
- Frequently Asked Questions
Table of content:
- What Is A Daemon Thread In Java?
- User Threads Vs. Daemon Threads In Java
- Methods For Daemon Threads In The Thread Class
- Creating Daemon Threads In Java
- Checking The Daemon Status Of A Thread
- Exceptions In Daemon Threads
- Limitations Of Daemon Threads In Java
- Practical Applications Of Daemon Threads In Java
- Common Mistakes To Avoid When Working With Daemon Threads In Java
- Conclusion
- Frequently Asked Questions
Table of content:
- Why Do Threads Need To Communicate?
- Understanding Inter Thread Communication In Java
- The wait() Method In Inter-Thread Communication
- The notify() Method In Inter-Thread Communication
- The notifyAll() Method In Inter-Thread Communication
- Difference Between wait() And sleep() Methods In Java
- Best Practices For Inter Thread Communication In Java
- Conclusion
- Frequently Asked Questions
Table of content:
- Understanding The Factorial Concept
- Approaches To Implementing Factorial In Java
- Find Factorial In Java Using Iterative Approach (Using a Loop)
- Find Factorial In Java Using Recursive Approach
- Complexity Analysis Of Factorial Programs In Java
- Applications Of Factorial Program In Java
- Conclusion
- Frequently Asked Questions
Table of content:
- Understanding The Leap Year Concept
- Approach To Check A Leap Year In Java
- Alternative Approach To Check A Leap Year In Java
- Conclusion
- Frequently Asked Questions
Table of content:
- What Is The Difference Between JDK, JRE, and JVM?
- What Is JVM (Java Virtual Machine)?
- What Is JRE (Java Runtime Environment)?
- What Is JDK (Java Development Kit)?
- Understanding The Difference Between JDK, JRE, And JVM
- Comparison Table For Difference Between JDK, JRE, And JVM
- Conclusion
- Frequently Asked Questions
Table of content:
- Difference Between Abstraction And Encapsulation In Java
- Understanding Abstraction In Java
- Understanding Encapsulation In Java
- When To Use Abstraction And Encapsulation?
- Conclusion
- Frequently Asked Questions
Table of content:
- Differences Between Abstract Class And Interface In Java
- What Is An Abstract Class In Java?
- What Is An Interface In Java?
- When To Use An Abstract Class?
- When To Use Interface?
- Compatibility Between Abstract Class And Interface In Java
- Conclusion
- Frequently Asked Questions
Table of content:
- Error Vs. Exception In Java
- What Is Error In Java?
- What Is Exception In Java?
- Best Practices For Handling Exceptions In Java
- Why Errors Should Not Be Handled In Java?
- Conclusion
- Frequently Asked Questions
Table of content:
- Key Differences: Java Vs. JavaScript
- What Is Java?
- What Is JavaScript?
- Difference Between Java And JavaScript Explained
- Conclusion
- Frequently Asked Questions
Table of content:
- Brief Introduction To C++
- Brief Introduction To Java
- Difference Between C++ and Java
- Overview & Features Of C++ Language
- Overview & Features of Java Language
- Example of C++ and Java Program
- Key Difference Between C++ And Java Explained
- Similarities Between Java Vs. C++
- Conclusion
- Frequently Asked Questions
- Test Your Skills: Quiz Time
Table of content:
- Basic Java interview questions and answers
- Intermediate Java interview questions and answers
- Advanced Java interview questions and answers
Table of content:
- Difference between core Java and advanced Java
- Important Core Java Questions
- Tips for Preparing for Core Java
Operators In Java | 9 Types, Precedence & More (+ Code Examples)

Operators are the building blocks that make your code dynamic and functional in all programming languages. Whether you're performing arithmetic operations, making logical comparisons, or controlling program flow, operators are essential to manipulating data and variables effectively.
In this article, we will discuss all the types of operators in Java and how to work with them with the help of detailed code examples. You’ll see how these operators help streamline coding tasks, improve program efficiency, and ensure your code works as expected. Let’s dive in and explore the different operator categories in Java with clear examples and real-world use cases.
What Are Operators In Java?
Java operators are symbols or keywords that perform specific operations on one or more operands and return a result. They allow you to manipulate variables, make calculations, compare values, and control the flow of your program. Operators are crucial for writing efficient and effective Java code, as they serve as the tools you use to interact with the data in your application.
For example:
int a = 5;
int b = 10;
int sum = a + b; // sum is 15
boolean result = a > b; // result is false
Here, the addition arithmetic operator (+) adds two values together. And the greater than relational operator (>) compares two values to check if one is greater than the other.
Importance of Operators in Java
Operators are crucial as they allow developers to manipulate data, control program flow, and perform calculations—all of which are essential for building functional and efficient applications. Let’s look at a few key reasons why we need operators in Java programming language:
- Efficient Data Manipulation: Operators enable easy manipulation of variables and values, allowing developers to perform arithmetic operations, assign values, and compare data in a concise and readable manner.
- Control Flow Management: Operators such as logical (&&, ||, !) and relational (>, <, ==) are key to controlling the flow of a program. They help in making decisions, repeating tasks, and ensuring that code executes correctly based on specific conditions.
- Optimization and Performance: Operators like bitwise operators allow for low-level operations on data, which can be critical for optimizing memory usage and performance, especially in systems where resources are limited.
- Code Readability and Simplicity: Using operators makes code more compact and expressive. Instead of writing long, complex statements, developers can use simple operators to perform tasks like checking conditions or performing calculations, making the code more readable and maintainable.
Operators in Java are, hence, indispensable for performing core functions within any application. They help streamline tasks, improve code efficiency, and ensure the smooth execution of the program. In the next section, we will look at the various types of operators in Java programming.
Types Of Operators In Java
Java operators are categorized based on their functionality, and understanding these categories is essential for mastering the language. The table below provides an overview of the main types of operators in Java language.
Operator Type |
Symbol/ Syntax |
Description |
Unary Operators |
+, -, ++, --, ! |
Work with a single operand to perform operations. |
Arithmetic Operators |
+, -, *, /, % |
Perform basic arithmetic/mathematical operations. |
Assignment Operators |
=, +=, -=, *=, /=, %=, &= |
Used to assign values to variables. |
Relational Operators |
==, !=, >, <, >=, <= |
Compare two values and return a boolean result (True or False) |
Logical Operators |
&&, ||, ! |
Combine boolean expressions to form complex conditions. |
Ternary Operator |
? : |
A shorthand for if-else statements. |
Bitwise Operators |
&, |, ^, ~ |
Perform operations on bits and bit values. |
Shift Operators |
<<, >>, >>> |
Shift bits of a value to the left or right, by a sepcified number. |
Increment/Decrement Operators |
++ , -- |
Increase or decrease a variable's value by 1. |
Instanceof Operator |
object instanceof ClassName |
Tests whether an object is an instance of a specified class. |
Now that you know about the different types of operators in Java, let’s discuss each of these types in detail with the help of code examples.
Unary Operators In Java
Unary operators are those that operate on a single operand to alter its value or state. For example, the logical complement operator (!) inverts a boolean value, while the unary minus (-) changes the sign of a number. These Java operators are applied directly to the operand, streamlining operations like sign reversal and logical inversion. The table below summarizes unary operators in Java.
Operator |
Symbol |
Description |
Unary Plus |
+ |
Indicates a positive value (usually redundant). |
Unary Minus |
- |
Negates an expression. |
Increment |
++ |
Increases a value by one. |
Decrement |
-- |
Decreases a value by one. |
Logical Complement |
! |
Inverts the value of a boolean |
Note: Increment (++) and Decrement (--) operators are part of unary operators but will be explained in detail in a separate section.
Below is a basic Java program example illustrating the use of these operators.
Code Example:
public class Main {
public static void main(String[] args) {
int x = 10;
boolean flag = true;
System.out.println("+x = " + (+x)); // 10
System.out.println("-x = " + (-x)); // -10
System.out.println("!flag = " + (!flag)); // false
}
}
Output:
+x = 10
-x = -10
!flag = false
Explanation:
In the basic Java code example,
- We first declare an integer variable x and a boolean variable flag, initializing them with the values 10 and true.
- Next, we use the System.out.println() method to display the results of the unary operations applied to these variables.
- Unary plus operator (+x) explicitly denotes a positive value but does not change the value of x, resulting in 10.
- The unary minus operator (-x) negates the value of x, changing 10 to -10.
- Finally, the logical complement operator (!flag) inverts the boolean value of flag, turning true to false.
Important Note: While unary operators work on a single operand, most other operators in Java are binary, meaning they require two operands to perform operations like arithmetic, comparison, or logical combinations.
Arithmetic Operators In Java
Arithmetic operators, as the name suggests, are used for performing basic mathematical operations like addition, subtraction, multiplication, division, and modulus (remainder). In shot, these Java operators are essential for handling numerical data. They are widely used in a variety of applications, ranging from simple arithmetic computations/ mathematical manipulations to formulating complex algorithms, and more.
In the table below, we have listed all the arithmetic operators in Java, along with the respective symbols and a short description.
Types Of Arithmetic Operators In Java
Operator Name |
Symbol |
Description |
Example (int a = 10; int b = 5) |
Addition |
+ |
Adds two operands. |
int sum = a + b; // 15 |
Subtraction |
- |
Subtracts the second operand from the first. |
int difference = a - b; // 5 |
Multiplication |
* |
Multiplies two operands. |
int product = a * b; // 50 |
Division |
/ |
Divides the numerator by the denominator. |
int quotient = a / b; // 2 |
Modulus |
% |
Returns the remainder of a division operation. |
int remainder = a % b; // 0 |
Now that you are familiar with the types of arithmetic operators in Java, look at the example below. The simple Java program example illustrates how to use these operators in action.
Code Example:
public class Main {
public static void main(String[] args) {
int a = 10;
int b = 5;
System.out.println("a + b = " + (a + b)); // Addition operation
System.out.println("a - b = " + (a - b)); // Subtraction operation
System.out.println("a * b = " + (a * b)); // Multiplication operation
System.out.println("a / b = " + (a / b)); // Division operations
System.out.println("a % b = " + (a % b)); // Modulo operation
}
}
Output:
a + b = 15
a - b = 5
a * b = 50
a / b = 2
a % b = 0
Explanation:
In the simple Java code example,
- We first create the Main class and define the main() method, which serves as the program’s entry point.
- Inside main(), we declare two integer variables, a and b, and initialize them with the values 10 and 5, respectively.
- Next, we use the arithmetic operators (+, -, *, /, and %) to perform various calculations.
- We print the outcome of each operation to the console using the System.out.println() method. Here, we combine a descriptive string message with the result using the string concatenation operator (+), which has the same symbol as the addition arithmetic operator.
- The operations are as follows:
- The addition operator (+) computes the sum of a and b, resulting in 15.
- The subtraction operator (-) calculates their difference, which is 5.
- The multiplication operator (*) gives the product 50.
- The division operator (/) performs integer division, returning 2.
- Finally, the modulus operator (%) calculates the remainder when a is divided by b, which is 0.
This example demonstrates the basic usage of arithmetic operators in Java, showcasing how they enable simple mathematical computations within a Java program.
Want to expand your knowledge of Java programming? Check out this amazing course and become the Java developer of your dreams.
Assignment Operators In Java
Assignment operators are vital for assigning and updating variable values in Java. These can further be classified into two types.
- The basic assignment operator, denoted by a single equals sign (=), assigns a value to a variable.
- The combined or compound assignment operators (like +=, -=, etc.) perform arithmetic operations and assignments in one step, simplifying code and improving efficiency.
The table below provides an overview of these Java operators, along with the respective symbols and descriptions.
Types Of Assignment Operators In Java
Operator |
Syntax |
Description |
Assignment |
= |
Assigns the value of the right operand to the left operand. |
Addition Assignment |
+= |
Adds the right operand to the left operand, then assigns the result (sum) to the left operand. |
Subtraction Assignment |
-= |
Subtracts the right operand from the left operand, then assigns the result (difference) to the left operand. |
Multiplication Assignment |
*= |
Multiplies the left operand by the right operand and then assigns the result (product) to the left operand. |
Division Assignment |
/= |
Divides the left operand by the right operand and then assigns the result (quotient) to the left operand. |
Modulus Assignment |
%= |
Computes the remainder of dividing the left operand by the right operand and then assigns the result (remainder) to the left operand. |
Below is an example illustrating the use of the Java assignment operators listed above.
Code Example:
public class Main {
public static void main(String[] args) {
// Simple assignment operations
int a = 10;
int b = 5;
// Compound addition assignment
a += b; // a = a + b
System.out.println("a += b: " + a);
//Compound subtraction assignment
a -= b; // a = a - b
System.out.println("a -= b: " + a);
//Compound multiplication assignment
a *= b; // a = a * b
System.out.println("a *= b: " + a);
//Compound division assignment
a /= b; // a = a / b
System.out.println("a /= b: " + a);
//Compound modulus assignment
a %= b; // a = a % b
System.out.println("a %= b: " + a);
}
}
Output:
a += b: 15
a -= b: 10
a *= b: 50
a /= b: 10
a %= b: 0
Explanation:
In the example,
- We start by declaring and initializing two integer variables, a and b. Here, we use the simple assignment operator to assign the values 10 and 5, respectively.
- Then, we use the compound assignment operators to update the value of the left-hand operand, here a, in place, as follows:
- Addition assignment operator (a += b) adds b to a and assigns the result to a, updating it to 15.
- Subtraction assignment operator (a -= b) subtracts b from a and assigns the result to a, reverting it to 10.
- Multiplication assignment operator (a *= b) multiplies a by b and assigns the result to a, increasing it to 50.
- Division assignment operator (a /= b) divides a by b and assigns the result to a, bringing it back to 10.
- Modulus assignment operator (a %= b) computes the remainder of a divided by b and assigns it to a, reducing it to 0.
- In each operation, we concatenate the descriptive message and the result using the string concatenation operator (+) before printing it with System.out.println().
Relational Operators In Java
As the name suggests, the relational operators compare two values to determine the relationship between them based on the purpose of the respective operator type. The result of this comparison is a boolean value: true if the relationship holds and false otherwise. These operators are often used in decision-making and to control program flow based on conditions. Look at the table below to understand the purpose of different relational operators.
Operator |
Syntax |
Description |
Equal to |
== |
Compares two values for equality. |
Not Equal to |
!= |
Compares two values for inequality. |
Greater than |
> |
Checks if the left operand is greater than the right operand. |
Less than |
< |
Checks if the left operand is less than the right operand. |
Greater than or Equal to |
>= |
Checks if the left operand is greater than or equal to the right operand. |
Less than or Equal to |
<= |
Checks if the left operand is less than or equal to the right operand. |
Code Example:
public class Main {
public static void main(String[] args) {
int a = 10;
int b = 5;
System.out.println("a == b: " + (a == b)); // false
System.out.println("a != b: " + (a != b)); // true
System.out.println("a > b: " + (a > b)); Â // true
System.out.println("a < b: " + (a < b)); Â // false
System.out.println("a >= b: " + (a >= b)); // true
System.out.println("a <= b: " + (a <= b)); // false
}
}
Output:
a == b: false
a != b: true
a > b: true
a < b: false
a >= b: true
a <= b: false
Explanation:
In the Java code example,
- We begin by declaring and initializing two integer variables, a and b, with values 10 and 5, respectively.
- Then, we use relational operators to evaluate comparisons/ relationships between these variables, returning true or false. Here’s how each operator works:
- Equality Check (a == b): Compares a and b for equality. Since 10 is not equal to 5, the result is false.
- Inequality Check (a != b): Checks if a and b are not equal. Since 10 is not equal to 5, the result is true.
- Greater Than (a > b): Verifies if a is greater than b. Since 10 is greater than 5, the result is true.
- Less Than (a < b): Checks if a is less than b. Since 10 is not less than 5, the result is false.
- Greater Than or Equal To (a >= b): Checks if a is greater than or equal to b. Since 10 is greater than 5, the result is true.
- Less Than or Equal To (a <= b): Verifies if a is less than or equal to b. Since 10 is not less than or equal to 5, the result is false.
- We display the outcome of each operation with descriptive text using the System.out.println() method.
Logical Operators In Java
Logical operators are used to combine or invert boolean values to perform logical operations. They evaluate expressions based on boolean logic and return a boolean result. These operators help construct complex conditions and control program flow based on multiple criteria. The table below lists the three types of logical operators with a short description of their functionality.
Operator |
Syntax |
Description |
AND |
&& |
Returns true if both operands are true. |
OR |
|| |
Returns true if either of the operands is true. |
NOT |
! |
Inverts the value of a boolean operand. |
Code Example:
public class Main {
public static void main(String[] args) {
boolean a = true;
boolean b = false;
System.out.println("a && b: " + (a && b)); // false
System.out.println("a || b: " + (a || b)); // true
System.out.println("!a: " + (!a)); // false
}
}
Output:
a && b: false
a || b: true
!a: false
Explanation:
In the example Java code,
- We initialize two boolean variables, a and b, with the values true and false, respectively. Here, the boolean data type indicates that a and b will hold only boolean values (true or false).
- Next, we use logical operators to perform logical operations on the values of a and b.
- The logical AND operator (a && b) checks if both a and b are true. Since a is true and b is false, the result is false.
- The logical OR operator (a || b) checks if either a or b is true. Since a is true, the result is true.
- The logical NOT operator (!a) negates the value of a. Since a is true, the result is false.
- We print the outcome to the console using the System.out.println() method.
Bitwise Operators In Java
Bitwise operators allow you to manipulate data at the binary level, operating on individual bits of integer values. These operators are often used for tasks that require precise control over binary data, like optimization or hardware-level programming. Look at the table below to learn how to use the different bitwise operators.
Operator |
Syntax |
Description |
AND |
& |
Performs a bitwise AND operation, where the result is 1 only if both bits are 1. |
OR |
| |
Performs a bitwise OR operation, where it returns 1 if at least one of the corresponding bits is 1; otherwise, it returns 0. |
XOR |
^ |
Performs a bitwise XOR operation, where the result is 1 if exactly one bit is 1. |
Complement |
~ |
Inverts all bits of the operand. |
Code Example:
public class Main {
public static void main(String[] args) {
int a = 5; // 0101 in binary
int b = 3; // 0011 in binary
System.out.println("a & b: " + (a & b)); // 1
System.out.println("a | b: " + (a | b)); // 7
System.out.println("a ^ b: " + (a ^ b)); // 6
System.out.println("~a: " + (~a)); // -6
}
}
Output:
a & b: 1
a | b: 7
a ^ b: 6
~a: -6
Explanation:
In the example Java program,
- We declare two integer variables, a and b, initialized to 5 and 3, respectively. These integers are represented in binary as 0101 and 0011.
- Then, we use different bitwise operators to perform operations on the binary representations of a and b, returning an integer result for each.
- The bitwise AND operation (a & b) compares each corresponding bit of a and b. It returns 1 only if both bits are 1. In this case:
0101 (a)
0011 (b)
----
0001 (result)
- The bitwise OR operation (a | b) compares each corresponding bit of a and b. It returns 1 if at least one of the bits is 1. Here:
0101 (a)
0011 (b)
----
0111 (result)
- The bitwise XOR operation (a ^ b) compares each corresponding bit of a and b. It returns 1 if only one of the bits is 1. In this case:
0101 (a)
0011 (b)
----
0110 (result)
- The bitwise complement operation (~a) inverts all bits of a. The two's complement of a is calculated, resulting in -6. The result is printed as ~a: -6.
- We print the outcome of each of these operations to the console.
Here is your chance to top the leaderboard while practising your coding skills: Participate in the 100-Day Coding Sprint at Unstop.
Shift Operators In Java
Shift operators in Java are used to shift bits of an integer value to the left or right. These operations enable efficient bit-level manipulation and are commonly used in tasks like mathematical optimizations, binary data encoding, or in situations requiring direct control over bits. The shift operations are different from the bitwise operators as they specifically work by shifting bits in a specified direction rather than performing logical operations on them.
Types Of Shift Operators In Java
Operator |
Syntax |
Description |
Left Shift |
<< |
Shifts the bits of the left operand to the left by the number of positions specified by the right operand. Zeros are added to the right. |
Right Shift |
>> |
Shifts the bits of the left operand to the right by the number of positions specified by the right operand. The leftmost bits are filled with the sign bit (for signed integers). |
Unsigned Right Shift |
>>> |
Shifts the bits of the left operand to the right by the number of positions specified by the right operand. Zeros are added to the left, regardless of the sign. |
Code Example:
public class Main {
public static void main(String[] args) {
int a = 8; // 1000 in binary
int b = 2; // 0010 in binary
System.out.println("a << b: " + (a << b)); // Right shift operation
System.out.println("a >> b: " + (a >> b)); // Left shift operation
System.out.println("a >>> b: " + (a >>> b)); // Unsigned right shift operation
}
}
Output:
a << b: 32
a >> b: 2
a >>> b: 2
Explanation:
In the Java example code,
- Inside main(), we declare two integer variables, a and b and assign values 8 (1000 in binary), and 2 (0010 in binary), respectively.
- Next, we perform the shift operations on a using b to specify the number of positions to shift.
- The left shift operator shifts the bits of a (binary 1000) to the left by b (2) positions.
- When you shift 1000 two places to the left, you get 100000, which equals 32 in decimal.
- The left shift operation essentially multiplies the value by 2^b (in this case, 2^2 = 4). So, the result of a << b is 32.
- The right shift operator shifts the bits of a (binary 1000) to the right by b (2) positions.
- Shifting 1000 two places to the right results in 0010, which equals 2 in decimal.
- The right shift operation essentially divides the value by 2^b (in this case, 2^2 = 4). So, the result of a >> b is 2.
- The unsigned right shift works similarly to the regular right shift but with a key difference.
- That is, it fills the leftmost bits with 0 instead of replicating the sign bit.
- This is particularly useful for handling unsigned integers.
- In this case, since a = 8 and b = 2, shifting 1000 two places to the right gives 0010, which is 2 in decimal. The result of the unsigned right shift is also 2.
- We print the outcome of each of these bitwise operations to the console using the println() method.
Increment & Decrement Operators In Java
Increment and decrement operators in Java are used to increase or decrease the value of a variable by 1, respectively. These operators are widely used in loops and other control structures where the value of a variable needs to be updated frequently.
- Increment Operator (++) increases the value of a variable by 1.
- Decrement Operator (--) decreases the value of a variable by 1.
There are two variations of these Java operators: pre-increment/decrement and post-increment/decrement. The difference lies in when the value is modified in relation to the expression. For prefixed operators, the value is increased/ decreased before being evaluated in the expression, and for postfix, the value is increased/ decreased after being evaluated in the expression.
Types Of Increment & Decrement Operators In Java
Operator |
Syntax |
Description |
Pre-Increment |
++var |
Increments the value of the variable by 1 before it is used in the expression. |
Post-Increment |
var++ |
Increments the value of the variable by 1 after it is used in the expression. |
Pre-Decrement |
--var |
Decrements the value of the variable by 1 before it is used in the expression. |
Post-Decrement |
var-- |
Decrements the value of the variable by 1 after it is used in the expression. |
Code Example:
public class Main {
public static void main(String[] args) {
int x = 5;
System.out.println("Pre-Increment: " + (++x)); // 6
System.out.println("Post-Increment: " + (x++)); // 6
System.out.println("Value of x after Post-Increment: " + x); // 7
int y = 5;
System.out.println("Pre-Decrement: " + (--y)); // 4
System.out.println("Post-Decrement: " + (y--)); // 4
System.out.println("Value of y after Post-Decrement: " + y); // 3
}
}
Output:
Pre-Increment: 6
Post-Increment: 6
Value of x after Post-Increment: 7
Pre-Decrement: 4
Post-Decrement: 4
Value of y after Post-Decrement: 3
Explanation:
In this example, we declare a variable, x and assign the value 5 to it.
- Then, we use the increment operators and its pre and post variations to perform operations on x.
- We first use the pre-increment operator (++x), which increases the value of x by 1 before it is used in the expression. So, x is incremented from 5 to 6, and the new value (6) is printed.
- Then, the post-increment operator (x++) increases the value of x by 1 after the current value is used in the expression. Initially, x is still 6 (from the previous operation), and its current value 6 is used in the output.
- After this, x is incremented to 7, and we print the updated value of x as “Value of x after Post-Increment”.
- Next, we declare another integer variable y and assign the value 5 to it.
- After that, we use the pre and post variations of the decrement operator to perform operations on y.
- We first use the pre-decrement operator (--y) which decreases the value of y by 1 before it is used in the expression. Here, y is first decremented from 5 to 4 and the new value (4) is printed as output.
- Then, we use the post-decrement operator (y--), which decreases the value of y by 1 after its current value is used in the expression. Initially, y is still 4 (from the previous operation), and its current value (4) is printed as Post-Decrement.
- After this, y is decremented to 3, and we print the updated value of y as “Value of y after Post-Decrement:”.
Ternary Operator In Java
The ternary operator offers a shorthand for conditional logic in Java. It evaluates a boolean expression and returns one of two values based on the result. This operator acts as a compact version of the if-else statement, making code more concise.
Operator |
Syntax |
Description |
Ternary |
? : |
Evaluates a boolean expression and returns one of two values based on the result. |
Code Example:
public class Main {
public static void main(String[] args) {
int a = 10;
int b = 5;
int max = (a > b) ? a : b;
System.out.println("Max of a and b: " + max);
}
}
Output:
Max of a and b: 10
Explanation:
In the example Java program,
- We declare and initialize two integer variables, a and b, with the values 10 and 5, respectively.
- Next, we use the ternary operator to check if the value of a is greater than b, i.e., condition a > b.
- If the condition evaluates to true, the value before the colon (a) is assigned to the variable max.
- If the condition evaluates to false, the value after the colon (b) is assigned to max.
- In this case, since a is greater than b (i.e., 10 > 5), the condition is true, and a is assigned to max variable.
- Finally, we print the value of max to the console.
Instanceof Operator In Java
The instanceof operator checks if an object is an instance of a particular class or implements a specific interface.
- It returns true if the object is of the specified type or subclass, and false otherwise.
- This operator is particularly useful for type-checking, ensuring that objects conform to expected types before performing operations on them.
Syntax:
object instanceof ClassName
Here, the object is the operand being checked, and ClassName refers to the class or interface you want to verify the object against.
Code Example:
public class Main {
public static void main(String[] args) {
String str = "Hello, world!";
boolean result = str instanceof String;
System.out.println("Is str an instance of String? " + result);
}
}
Output:
Is str an instance of String? true
Explanation:
In the sample Java code,
- We first declare a variable str and initialize it with the string value "Hello, world!".
- Then, we use the instanceof operator to check if str is an instance of the String class. This is done using the expression str instanceof String.
- We store the outcome in the boolean variable result since the outcome will be true or false.
- Finally, we print the result to the console, which confirms that str is indeed an instance of the String class.
Precedence & Associativity Of Java Operators
When working with multiple operators in a single expression, the precedence and associativity of the operators play a key role in determining how the expression will be evaluated as a whole.
- Operator precedence determines the order in which operators are evaluated in an expression. Operators with higher precedence are evaluated before those with lower precedence.
- On the other hand, associativity defines the direction in which operators of the same precedence level are evaluated within the same expression. Associativity can either be left-to-right (LTR) or right-to-left (RTL).
Let’s look at the rules governing these two aspects of operators before discussing where the operators are placed on the scale of precedence.
Precedence Rules:
- Operators with higher precedence are evaluated first.
- Parentheses () can be used to override the default precedence.
Associativity Rules:
- Left-to-right associativity means that operators are evaluated from left to right.
- Right-to-left associativity means that operators are evaluated from right to left.
Table Of Operator Precedence (Decreasing Order) With Associativity
Precedence Level |
Operator(s) |
Associativity |
Category |
1 |
[] . () :: |
Left-to-right |
Postfix, Member Access, Calls |
2 |
++ -- |
Right-to-left |
Unary Unary (Post-Increment/ Decrement) |
3 |
++ -- + - ~ ! |
Right-to-left |
Unary (Pre-Increment/Decrement, Negation) |
4 |
new |
Left-to-right |
Creation |
5 |
* / % |
Left-to-right |
Multiplicative |
6 |
+ - |
Left-to-right |
Additive |
7 |
<< >> >>> |
Left-to-right |
Shift |
8 |
< <= > >= instanceof |
Left-to-right |
Relational, Type-checking |
9 |
== != |
Left-to-right |
Equality |
10 |
& |
Left-to-right |
Bitwise AND |
11 |
^ |
Left-to-right |
Bitwise XOR |
12 |
&& |
Left-to-right |
Logical AND |
13 |
?: |
Right-to-left |
Ternary |
14 |
= += -= *= /= %= &= ^= <<= >>= >>>= |
Right-to-left |
Assignment, Compound Assignment |
15 |
, |
Left-to-right |
Comma (used to separate expressions) |
Need more guidance on how to become a Java developer? You can now select an expert to be your mentor here.
Advantages & Disadvantages Of Operators In Java
Java operators play a vital role in simplifying operations, but like all Java features, they come with their own set of advantages and disadvantages.
Advantages |
Disadvantages |
|
|
Conclusion
Understanding Java operators is essential for writing clear, effective code. Operators facilitate a wide range of operations, from basic arithmetic to complex bitwise manipulations. They play a key role in condition testing, decision-making, and data manipulation.
- The extensive set of operators in Java—arithmetic, unary, relational, logical, bitwise, and ternary—serves various purposes.
- However, it is important to be aware of their behavior, especially with regard to precedence and associativity.
- Ensuring correct evaluation order is critical for avoiding logical errors and unexpected results.
With a proper understanding of operator precedence and associativity, one can avoid common pitfalls and make the best use of the operators in Java.
Frequently Asked Questions
Q. What are the 7 Arithmetic Operators in Java?
The 7 types of arithmetic operators in Java are listed in the table below.
Operator |
Description |
+ (Addition) |
Adds two operands. |
- (Subtraction) |
Subtracts the second operand from the first. |
* (Multiplication) |
Multiplies two operands. |
/ (Division) |
Divides the numerator by the denominator. |
% (Modulus) |
Returns the remainder of the division. |
++ (Increment) |
Increases the value of a variable by 1. |
-- (Decrement) |
Decreases the value of a variable by 1. |
Q. What is the & Operator in Java?
The ampersand symbol (&) denotes the bitwise AND operator in Java. It performs a bitwise AND operation between two integer operands. That is,
- The result is 1 if both corresponding bits of the operands are 1
- Otherwise, the result is 0.
For Example:
int a = 5; // 0101 in binary
int b = 3; // 0011 in binary
int result = a & b; // 0001 in binary, which is 1 in decimal
Q. Which Java operator has only one operand?
The unary operators in Java operate on a single operand. They are listed in the table below with a short example.
Operator |
Description |
Example |
Unary Plus (+) |
Indicates a positive value (often redundant). |
int a = +5; |
Unary Minus (-) |
Negates the operand. |
int a = -5; |
Increment (++) |
Increases the operand’s value by 1. |
int a = 5; a++; |
Decrement (--) |
Decreases the operand’s value by 1. |
int a = 5; a--; |
Logical NOT (!) |
Inverts the boolean value of the operand. |
boolean flag = true; flag = !flag; |
Bitwise NOT (~) |
Inverts all bits of the operand. |
int a = 5; int b = ~a; // Result is -6 |
Q. What is the == Operator in Java?
The double equal to symbol (==) represents the equality relational operator in Java. It checks if two values or references are equal. It compares both the value and the memory address (for references). It is commonly used for both primitive data types and object references.
Code Example:
public class EqualityOperatorExample {
public static void main(String[] args) {
int x = 10;
int y = 10;
if (x == y) {
System.out.println("x and y are equal");
}
}
}
Output:
x and y are equal
Q. What are the three types of operands?
In programming, operands are data, values or variables on which operators perform operations. The table below lists the three types of operands:
Type of Operand |
Description |
Example |
Constants |
Fixed values that do not change during the execution of a program. They are directly used in expressions. |
5, 3.14, 'A', "Hello" |
Variables |
Named storage locations in memory that can hold different values during the execution of a program. They must be declared before use. |
int x = 5;, double pi = 3.14; |
Expressions |
Combinations of variables, constants, and operators that are evaluated to produce a result/ new value. These can be arithmetic, logical, or other types. |
a + b, x * y - 7, a > b |
Q. What is the relationship between data types and operators in Java?
Data types specify the type of value a variable can hold while operators perform operations on these values. The type of operand determines which operators can be used with it. For instance:
- Arithmetic operators can only be applied to numeric data types (int, float, etc.).
- Logical operators operate on boolean types.
- Bitwise operators work on integer types.
A mismatch between data types might require type conversion or can lead to compilation errors.
Q. Differentiate between operation, operator and operand?
Term |
Definition |
Example |
Operation |
A procedure that produces a result from one or more operands. |
5 + 3 (addition operation) |
Operator |
A symbol that tells the compiler or interpreter to perform a specific action/ operation on the operands. |
+ (addition operator) |
Operand |
The values or variables on which the operator acts/performs the operation. |
5 and 3 in the expression 5 + 3 |
This compiles our discussion on operators in Java. Do check out the following:
- Identifiers In Java | Types, Conventions, Errors & More (+Examples)
- Advantages And Disadvantages of Java Programming Language
- Top 15+ Difference Between C++ And Java Explained (+Similarities)
- Method Overriding In Java | Rules, Use-Cases & More (+Examples)
- Dynamic Method Dispatch In Java (Runtime Polymorphism) + Examples
An economics graduate with a passion for storytelling, I thrive on crafting content that blends creativity with technical insight. At Unstop, I create in-depth, SEO-driven content that simplifies complex tech topics and covers a wide array of subjects, all designed to inform, engage, and inspire our readers. My goal is to empower others to truly #BeUnstoppable through content that resonates. When I’m not writing, you’ll find me immersed in art, food, or lost in a good book—constantly drawing inspiration from the world around me.
Comments
Add commentLogin to continue reading
And access exclusive content, personalized recommendations, and career-boosting opportunities.

Subscribe
to our newsletter
Esuru Pooja.C 1 hour ago
Ankita Das 2 days ago
Nirdesh Sharma 2 days ago
K.SHIVA GANESH 2 days ago
Harsh Singh 4 days ago
Deep Khivasara 4 days ago