Module-1 PART-3
Module-1 PART-3
Module -1 PART -3: Operators and Assignments - increment & decrement operators, arithmetic operators,
string concatenation operators, Relational operators, Equality operators, instance of operators, Bitwise
operators, Short circuit operators, type cast operators, assignment operator, conditional operator, new
operator, [ ] operator, Precedence of java operators, Evaluation order of java operands, new Vs new Instance(
), instance of Vs is Instance( ), ClassNotFoundException Vs NoClassDefFoundError.
pre-increment ex : y=++x ;
Increment Operator
post-increment ex: y=x++;
pre-decrement ex : y=--x ;
Decrement Operator
post-decrement ex : y=x-- ;
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.other wise 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);
int x= 4;
int y = ++(++x);
System.out.println(y);
3. For the final variables we can't apply increment or decrement operators ,other wise
we will get compile time error
Ex:
final int x = 4;
x++; // x = x + 1
System.out.println(x);
4. We can apply increment or decrement operators even for primitive data types
except boolean .
Ex:
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
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);
Ex:
byte b=10;
b++;
System.out.println(b); //output : 11
Arithmetic Operator :
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
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
3. 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
4. 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
ArithmeticException :
1. The only overloaded operator in java is ' + ' operator some times it access arithmetic
addition operator & some times 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 :
Example :
a=b+c+d ;
CE : incompatible type
found : int
required : java.lang.String
Example :
a=a+b+c ; // valid
Example :
b=a+c+d ;
CE : incompatible type
found : java.lang.String
required : int
Example :
b=b+c+d ; // valid
1. We can apply relational operators for every primitive type except boolean .
1. We can apply equality operators for every primitive type including boolean type 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.
3. 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
4. For any object reference of on r==null is always false , but null==null is always true .
String s=null ;
System.out.println(r==null); //true
System.out.println(null==null); //true
instanceof operator :
1. We can use the instanceof operator to check whether the given an object is
perticular type or not
Ex :
public class Thread extends Object implements Runnable {
}
4. Whenever we are checking the parent object is child type or not by using instanceof
operator that we get false.
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 :
1. We can apply this operator only for integral types but not for boolean types.
Example :
System.out.println(~true); // CE :opetator ~ can not be applied to boolean
System.out.println(~4); //-5
2. 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 where as -ve number will be
represented in 2's comlement form.
This operator is applicable only for boolean types but not for integral types.
Example :
Example:
System.out.println(!true);//false
System.out.println(!false);//true
System.out.println(!4);//CE : operator ! can not 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.
These operators are exactly same as normal bitwise operators &(AND), |(OR) except the
following differences.
&,| && , ||
Both arguments should be evaluated
Second argument evaluation is optional.
always.
Relatively performance is low. Relatively performance is high.
Applicable for both integral and Applicable only for boolean types but not for
boolean types. integral types.
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)
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);
Output:
operator x y
& 11 17
| 12 16
&& 11 16
|| 12 16
Example :
int x=10 ;
if(++x < 10 && ((x/0)>10) ) {
System.out.println("Hello");
}
else {
System.out.println("Hi");
}
output : Hi
1. implicit
2. explicit
int x='a';
System.out.println(x); //97
Example 1:
int x='a';
System.out.println(x);//97
6. 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.
Example :
int x=130;
byte b=(byte)x;
System.out.println(b); //-126
6.
Example 2 :
int x=130;
byte b=x;
System.out.println(b); //CE : possible loss of precision
7. When ever 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.
8. Example 3 :
int x=150;
short s=(short)x;
byte b=(byte)x;
System.out.println(s); //150
System.out.println(b); //-106
When ever 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 :
1. Simple assignment:
Example: int x=10;
2. Chained assignment:
3. 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
Example 2:
int a=b=c=d=30;
CE : can not find symbol
symbol : variable b
location : class Test
4. Compound assignment:
1. 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
byte b=10;
b=b+1;
System.out.println(b);
byte b=10;
b++;
CE :
System.out.println(b); //11
possible loss of precission
found : int
required : byte
byte b=127;
byte b=10;
b+=3;
b+=1;
System.out.println(b);
System.out.println(b); //11
//-126
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 (? :)
Ex 2 :
int x=(10>20)?30:((40>50)?60:70);
System.out.println(x); //70
new operator :
[ ] operator:
There is no precedence for operands before applying any operator all operands will be
evaluated from left to right.
Example:
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( ) :
10. If dynamically provide class name is not available then we will get the
RuntimeException saying ClassNotFoundException
11. To use newInstance( ) method compulsory corresponding class should contains no
argument constructor , otherwise we will get the RuntimeException saying
InstantiationException.
new newInstance( )
new is an operator , which can be newInstance( ) is a method , present in class Class ,
used to create an object which can be used to create an object .
We can use new operator if we We can use the newInstance( ) method , If we don't
know the class name at the class name at the beginning and available dynamically
beginning. Runtime.
Test t= new Test( ); Object o=Class.forName(arg[0]).newInstance( );
If the corresponding .class file not
available at Runtime then we will If the corresponding .class file not available at
get RuntimeException saying Runtime then we will get RuntimeException saying
NoClassDefFoundError , It is ClassNotFoundException , It is checked
unchecked
To used newInstance( ) method the corresponding
To used new operator the
class should compulsory contain no argument
corresponding class not required to
constructor , Other wise we will get RuntimeException
contain no argument constructor
saying InstantiationException.
1. 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
2. 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
int x= 10 ;
1. consider old value of x for assignment x=10
x=x++;
2. Increment x value x=11
System.out.println(x);
3. Perform assignment with old considered x value x=10
//10