0% found this document useful (0 votes)
173 views

Operators & Assignments by Durga Sir

The document discusses various Java operators like increment/decrement, arithmetic, relational, equality, instanceof, and assignment operators. It provides examples of using each operator and exceptions that may occur. It explains the differences between operators like == vs equals(), precedence rules, and differences between integral vs floating-point arithmetic for operations like division by zero.

Uploaded by

Lalit
Copyright
© © All Rights Reserved
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
173 views

Operators & Assignments by Durga Sir

The document discusses various Java operators like increment/decrement, arithmetic, relational, equality, instanceof, and assignment operators. It provides examples of using each operator and exceptions that may occur. It explains the differences between operators like == vs equals(), precedence rules, and differences between integral vs floating-point arithmetic for operations like division by zero.

Uploaded by

Lalit
Copyright
© © All Rights Reserved
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
You are on page 1/ 37

Operators & Assignments

1. increment & decrement operators

2. arithmetic operators

3. string concatenation operators

4. Relational operators

5. Equality operators

6. instanceof operators

7. Bitwise operators

8. Short circuit operators

9. type cast operators

10. assignment operator

11. conditional operator

12. new operator

13. [] operator

14. Precedence of java operators

15. Evaluation order of java operands

16. new Vs newInstance()

17. instanceof Vs isInstance()

18. ClassNotFoundException Vs NoClassDefFoundError


Increment & Decrement operators:
The following table will demonstrate the use of increment and
decrement operators.

Expression initial value of x value of y final value of x


y=++x 10 11 11
y=x++ 10 10 11
y=--x 10 9 9
y=x-- 10 10 9

Ex:

1. Increment & decrement operators we can apply only for variables but
not for constant values. Otherwise we will get compile time error.

Ex:

int x = 4;

int y = ++x;

System.out.pritnln(y); //output: 5

Ex 2:
int x = 4;

int y = ++4;

System.out.pritnln(y);

C.E: unexpected type

required: varialbe

found: value

2. We can't perform nesting of increment or decrement operator,


Otherwise we will get compile time error.

int x= 4;
int y = ++(++x);

System.out.println(y);

C.E: unexpected type

required: varialbe

found : value

3. For the final variables we can't apply increment or decrement


operators, Otherwise we will get compile time error.

Ex:

final int x = 4;

x++; // x = x + 1

System.out.println(x);

C.E: can't assign a value to final variable 'x'.

4. We can apply increment or decrement operators even for primitive


data types except boolean.
int x=10;

x++;

System.out.println(x); //output:11

char ch='a';

ch++;

System.out.println(ch); //b

double d=10.5;

d++;

System.out.println(d); //11.5

boolean b=true;

b++;

System.out.println(b);

CE: operator ++ can't be applied to Boolean.

Difference between b++ and b = b+1?


 If we are applying any arithmetic operators b/w 2 operands 'a' &
'b' the result type is max(int, type of a , type of b).

Ex 1:

byte a=10;

byte b=20;

byte c=a+b; //byte c=byte(a+b); valid

System.out.println(c);

CE: possible loss of precession

found: int

required: byte

Ex 2:

byte b=20;

byte b=b+1; //byte b=(byte)b+1 ; valid

System.out.println(c);
CE: possible loss of precession

found: int

required: byte

In the case of Increment & Decrement operators internal type casting


will be performed automatically by the compiler.

b++; => b=(type of b)b+1;

Ex:

byte b=10;

b++;

System.out.println(b); //output : 11

Arithmetic Operator:
1. If we apply any Arithmetic operation b/w 2 variables a & b,the
result type is always max(int, type of a , type of b).

Example:

byte + byte=int;

byte+short=int;

short+short=int;
short+long=long;

double+float=double;

int+double=double;

char+char=int;

char+int=int;

char+double=double;

System.out.println('a' + 'b'); // output : 195

System.out.println('a' + 1); // output : 98

System.out.println('a' + 1.2); // output : 98.2

 In integral arithmetic (byte , int , short , long) there is no


way to represents infinity, if infinity is the result we will get
the ArithmeticException / by zero

System.out.println(10/0); // output RE : ArithmeticException / by zero

 But in floating point arithmetic(float , double) there is a way


represents infinity.

System.out.println(10/0.0); // output : infinity


 For the Float & Double classes contains the following constants:
1. POSITIVE_INFINITY
2. NEGATIVE_INFINITY
 Hence , if infinity is the result we won't get any
ArithmeticException in floating point arithmetics.

Ex:
System.out.println(10/0.0); // output : infinity
System.out.println(-10/0.0); // output : - infinity

 NaN(Not a Number) in integral arithmetic (byte,short,int,


long) there is no way to represent undefine the results.
Hence the result is undefined we will get
ArithmericException in integral arithmetic

System.out.println(0/0); // output RE : ArithmeticException / by zero

 But floating point arithmetic (float , double) there is a way to


represents undefined the results .
 For the Float, Double classes contains a constant NaN , Hence the
result is undefined we won't get ArithmeticException in floating
point arithmetics .

System.out.println(0.0/0.0); // output : NaN

System.out.println(-0.0/0.0); // output : NaN

 For any 'x' value including NaN , the following expressions


returns false.

// Ex: x=10;
 System.out.println(10 < Float.NaN ); // false
 System.out.println(10 <= Float.NaN ); // false
 System.out.println(10 > Float.NaN ); // false
 System.out.println(10 >= Float.NaN ); // false
 System.out.println(10 == Float.NaN ); // false
 System.out.println(Float.NaN == Float.NaN ); // false
 System.out.println(10 != Float.NaN ); //true
 System.out.println(Float.NaN != Float.NaN ); //true

ArithmeticException:
1. It is a RuntimeException but not compile time error

2. It occurs only in integral arithmetic but not in floating point


arithmetic.

3. The only operations which cause ArithmeticException are: ' / ' and
' % '.
String Concatenation operator:
1. The only overloaded operator in java is '+' operator sometimes it
access arithmetic addition operator & sometimes it access String
concatenation operator.

2. If acts as one argument is String type, then '+' operator acts as


concatenation and if both arguments are number type, then operator
acts as arithmetic operator.

Ex:

String a="ashok";

int b=10 , c=20 , d=30 ;

System.out.println(a+b+c+d); //output : ashok102030

System.out.println(b+c+d+a); //output : 60ashok

System.out.println(b+c+a+d); //output : 30ashok30

System.out.println(b+a+c+d); //output : 10ashok 2030

Example:
Example:

 consider the following declaration

String a="ashok";

int b=10, c=20 , d=30;

a=b+c+d;

CE : incompatible type

found : int

required : java.lang.String

a=a+b+c; // valid

b=a+c+d;

CE: incompatible type

found: java.lang.String

required: int
Example:

b=b+c+d; // valid

Relational Operators(< , <= , > , >= ):

 We can apply relational operators for every primitive type except


boolean.

System.out.println(10 < 10.5); //true

System.out.println('a' > 100.5); //false

System.out.println('b' > 'a'); //true

System.out.println(true > false);

//CE: operator > can't be applied to boolean , Boolean

We can't apply relational operators for object types.

System.out.println("ashok123" > "ashok");

// CE: operator > can't be applied to java.lang.String ,


java.lang.String
Nesting of relational operator is not allowed

System.out.println(10 > 20 > 30); // System.out.println(true >

30);

//CE: operator > can't be applied to boolean , int.

Equality Operators: (==,!=)


 We can apply equality operators for every primitive type
including boolean type also

System.out.println(10 == 20) ; //false

System.out.println('a' == 'b' ); //false

System.out.println('a' == 97.0 ) //true

System.out.println(false == false) //true

 We can apply equality operators for object types also.


 For object references r1 and r2 , r1 == r2 returns true if and
only if both r1 and r2 pointing to the same object. i.e., ==
operator meant for reference-comparision Or address-comparision.

Thread t1=new Thread( ) ;

Thread t2=new Thread( );

Thread t3=t1 ;

System.out.println(t1==t2); //false

System.out.println(t1==t3); //true
 To use the equality operators between object type compulsory
these should be some relation between argument types(child to
parent , parent to child), Otherwise we will get Compiletime
error incompatible types

Thread t=new Thread( ) ;

Object o=new Object( );

String s=new String("durga");

System.out.println(t ==o); //false

System.out.println(o==s); //false

System.out.println(s==t);

CE: incompatible types : java.lang.String and java.lang.Thread

 For any object reference of on r==null is always false , but


null==null is always true.

String s= new String("ashok");

System.out.println(s==null); //output : false

String s=null ;
System.out.println(r==null); //true

System.out.println(null==null); //true

 What is the difference between == operator and .equals( )


method ?
1. In general we can use .equals( ) for content comparision where as
== operator for reference comparision.

String s1=new String("ashok");

String s2=new String("ashok");

System.out.println(s1==s2); //false

System.out.println(s1.equals(s2)); //true

instanceof operator:
1. We can use the instanceof operator to check whether the given an
object is perticular type or not
Object o = l.get(0); // l is an array name

if (o instanceof Student) {

Student s = (Student)o ; //perform student specific operation

else if(o instanceof Customer) {

Customer c = (Customer)o; //perform Customer specific operations

 instanceof X here O is object reference , X is


ClassName/Interface name.

Thread t = new Thread( );

System.out.println(t instanceof Thread); //true

System.out.println(t instanceof Object); //true

System.out.println(t instanceof Runnable); //true

Ex:

public class Thread extends Object implements Runnable {

}
 To use instance of operator compulsory there should be some
relation between argument types (either child to parent Or parent
to child Or same type) Otherwise we will get compile time error
saying inconvertible types.

Thread t=new Thread( );

System.out.println(t instanceof String);

CE: inconvertable errors

found : java.lang.Thread

required : java.lang.String

 Whenever we are checking the parent object is child type or not


by using instanceof operator that we get false.

Object o=new Object( );

System.out.println(o instanceof String ); //false


Object o=new String("ashok");

System.out.println(o instanceof String); //true

 For any class or interface X null instanceof X is always returns


false

System.out.println(null instanceof X); //false

Bitwise Operators : ( & , | , ^)


1. & (AND): If both arguments are true then only result is true.

2. | (OR): if at least one argument is true. Then the result is true.

3. ^ (X-OR): if both are different arguments. Then the result is true.

Example:

System.out.println(true&false);//false

System.out.println(true|false);//true

System.out.println(true^false);//true

 We can apply bitwise operators even for integral types also.

Example:

System.out.println(4&5);//4 using binary digits

System.out.println(4|5);//5 4-->100

System.out.println(4^5);//1 5-->101

Example:
Bitwise complement (~) (tilde symbol) operator:

1. We can apply this operator only for integral types but not for
boolean types.

Example:

System.out.println(~true); // CE :opetator ~ cannot be applied to

boolean

System.out.println(~4); //-5

description about above program:

4--> 0 000.......0100 0-----+ve

~4--> 1 111.......1011 1--- -ve

2's compliment of ~4 --> 000....0100 add 1

result is : 000...0101 =5

Note: The most significant bit access as sign bit 0 means +ve number,
1 means -ve number. +ve number will be represented directly in memory
whereas -ve number will be represented in 2's complement form.
Boolean complement (!) operator:
 This operator is applicable only for boolean types but not for
integral types.

Example:

System.out.println(!true);//false

System.out.println(!false);//true

System.out.println(!4);//CE : operator ! cannot be applied to int

Summary:

&

| Applicable for both boolean and integral types.

~ --------Applicable for integral types only but not for boolean


types.
! --------Applicable for boolean types only but not for integral
types.

Short circuit (&&, ||) operators:


These operators are exactly same as normal bitwise operators &(AND), |
(OR) except the following differences.

& , | && , ||
 Both arguments should be  Second argument evaluation
evaluated always. is optional.
 Relatively performance is  Relatively performance is
low. high.
 Applicable for both integral  Applicable only for boolean
and boolean types. types but not for integral
types.
1. x&&y: y will be evaluated if and only if x is true.(If x is false
then y won't be evaluated i.e., If x is ture then only y will be
evaluated)
2. x||y: y will be evaluated if and only if x is false.(If x is true
then y won't be evaluated i.e., If x is false then only y will be
evaluated)

Example:

int x=10 , y=15 ;

if(++x < 10 || ++y > 15) { //instead of || using &,&&, | operators

x++;

else {

y++;

System.out.println(x+"----"+y);
Example:

int x=10 ;

if(++x < 10 && ((x/0)>10) ) {

System.out.println("Hello");

else {

System.out.println("Hi");

output: Hi

Type Cast Operator:


There are 2 types of type-casting

1. implicit

2. explicit

implicit type casting:


int x='a';

System.out.println(x); //97

1. The compiler is responsible to perform this type casting.


2. Whenever we are assigning lower datatype value to higher datatype
variable then implicit type cast will be performed.

3. It is also known as Widening or Upcasting.

4. There is no lose of information in this type casting.

5. The following are various possible implicit type casting.

Diagram:

Example 1:

int x='a';

System.out.println(x);//97

Note: Compiler converts char to int type automatically by implicit


type casting.

Example 2:

double d=10;

System.out.println(d);//10.0

Note: Compiler converts int to double type automatically by implicit


type casting.

Explicit type casting:


1. Programmer is responsible for this type casting.

2. Whenever we are assigning bigger data type value to the smaller


data type variable then explicit type casting is required.

3. Also known as Narrowing or down casting.


4. There may be a chance of lose of information in this type casting.

5. The following are various possible conversions where explicit type


casting is required.

Diagram:

Example:

int x=130;

byte b=(byte)x;

System.out.println(b); //-126
Example 2:

int x=130;

byte b=x;

System.out.println(b); //CE : possible loss of precision

 Whenever we are assigning higher datatype value to lower datatype


value variable by explicit type-casting ,the most significant
bits will be lost i.e., we have considered least significant
bits.

Example 3:

int x=150;

short s=(short)x;

byte b=(byte)x;

System.out.println(s); //150

System.out.println(b); //-106

 Whenever we are assigning floating point value to the integral


types by explicit type casting, the digits of after decimal point
will be lost.

Example 4:

double d=130.456 ;

int x=(int)d ;

System.out.println(x); //130

byte b=(byte)d ;

System.out.println(b); //-206
Assignment Operator:
 There are 3 types of assignment operators

Simple assignment:
Example:

int x=10;

Chained assignment:
Example:

int a,b,c,d;

a=b=c=d=20;

System.out.println(a+"---"+b+"---"+c+"---"+d);//20---20---20---20

int b , c , d ;

int a=b=c=d=20 ; //valid


 We can't perform chained assignment directly at the time of
declaration.

Example 2:

int a=b=c=d=30;

CE: can ot find symbol

symbol: variable b

location: class Test

Compound assignment:
 Sometimes we can mixed assignment operator with some other
operator to form compound assignment operator.

Ex:

int a=10 ;

a +=20 ;

System.out.println(a); //30
 The following is the list of all possible compound assignment
operators in java.

 In the case of compound assignment operator internal type casting


will be performed automatically by the compiler (similar to
increment and decrement operators.)
Ex:

int a , b , c , d ;

a=b=c=d=20 ;

a += b-= c *= d /= 2 ;

System.out.println(a+"---"+b+"---"+c+"---"+d); // -160...-180--200--10

Conditional Operator (?:)


 The only possible ternary operator in java is conditional
operator

Ex 1:

int x=(10>20)?30:40;

System.out.println(x); //40

Ex 2:

int x=(10>20)?30:((40>50)?60:70);

System.out.println(x); //70

Nesting of conditional operator is possible


new operator:
1. We can use "new" operator to create an object.

2. There is no "delete" operator in java because destruction of


useless objects is the responsibility of garbage collector.

[ ] operator:
 We can use this operator to declare under construct/create
arrays.

Java operator precedence:


1. Unary operators: [] , x++ , x-- , ++x , --x , ~ , ! , new , <type>

2. Arithmetic operators : * , / , % , + , -.

3. Shift operators : >> , >>> , << .

4. Comparision operators : <, <=,>,>=, instanceof.

5. Equality operators: == , !=

6. Bitwise operators: & , ^ , | .


7. Short circuit operators: && , || .

8. Conditional operator: (?:)

9. Assignment operators: += , -= , *= , /= , %= . . .

Evaluation order of java operands:


 There is no precedence for operands before applying any operator
all operands will be evaluated from left to right.

Example:

package fundamental_java;

public class OperatorsDemo {


public static void main(String[] args) {
System.out.println(m1(1) + m1(2) * m1(3) / m1(4) * m1(5) +
m1(6));
}

public static int m1(int i) {


System.out.println(i);
return i;
}
}
Ex 2:

int i=1;

i+=++i + i++ + ++i + i++;

System.out.println(i); //13

description:

i=i + ++i + i++ + ++i + i++ ;

i=1+2+2+4+4;

i=13;

new Vs newInstance( ):
 new is an operator to create an objects , if we know class name
at the beginning then we can create an object by using new
operator .
 newInstance( ) is a method presenting class " Class " , which can
be used to create object.
 If we don't know the class name at the beginning and its
available dynamically Runtime then we should go for newInstance()
method
public class Test {

public static void main(String[] args) Throws Exception {

Object o=Class.forName(arg[0]).newInstance( ) ;

System.out.println(o.getClass().getName( ) );

} }

 If dynamically provide class name is not available then we will


get the RuntimeException saying ClassNotFoundException
 To use newInstance( ) method compulsory corresponding class
should contains no argument constructor , otherwise we will get
the RuntimeException saying InstantiationException.

Difference between new and newInstance( ):


new newInstance( )

 new is an operator, which  newInstance( ) is a method ,


can be used to create an present in class Class, which can
object. be used to create an object .
 We can use new operator if  We can use the newInstance()
we know the class name at method, If we don't class name at
the beginning. the beginning and available
Test t= new Test( ); dynamically Runtime.
 Object o =
Class.forName(arg[0]).newInstance
( );
 If the corresponding .class  If the corresponding .class file
file not available at not available at Runtime then we
Runtime then we will get will get RuntimeException saying
RuntimeException saying NoClassDefFoundError, It is
NoClassDefFoundError, It is unchecked.
unchecked.
 To used new operator the  To used newInstance( ) method the
corresponding class not corresponding class should
required to contain no compulsory contain no argument
argument constructor. constructor , Otherwise we will
get RuntimeException saying
InstantiationException.

Difference between ClassNotFoundException &


NoClassDefFoundError:
 For hard coded class names at Runtime in the corresponding .class
files not available we will get NoClassDefFoundError , which is
unchecked.

Test t = new Test( );

In Runtime Test.class file is not available then we will get


NoClassDefFoundError.

 For Dynamically provided class names at Runtime , If the


corresponding .class files is not available then we will get the
RuntimeException saying ClassNotFoundException.

Ex: Object o=Class.forname("Test").newInstance( );

At Runtime if Test.class file not available then we will get the


ClassNotFoundException , which is checked exception.

Difference between instanceof and isInstance( ):


instanceof isInstance( )

 instanceof an  isInstance( ) is a method , present in class Class


operator which can , we can use isInstance( ) method to checked
be used to check whether the given object is perticular type or not
whether the given We don't know at the type at beginning it is
object is available Dynamically at Runtime.
perticular type or
not We know at the
type at beginning
it is available.
String s = new class Test {
String("ashok");
System.out.println(s public static void main(String[] args) {
instanceof Object );
Test t = new Test( ) ;
//true System.out.println(Class.forName(args[0]).isInstance())
;
 If we know the type
at the beginning //arg[0] --- We don't know the type
only. at beginning

}
}
java Test Test //true
java Test String //false
java Test Object //true

You might also like