We have the following numeric primitive types:
Apart of the above, we have the non numeric primitive type “char” : 16 bits and unsigned, so that it may represent Unicode characters.
For boolean types there is not a range; a boolean can be only true or false.A boolean value cannot be assigned to any other data type. Except boolean, all the remaining 7 data types can be assigned to one another either implicitly or explicitly; but boolean cannot. We say, boolean is incompatible for conversion. we can only assign a boolean value to another boolean.
Widening primitive conversion
For the primitive data types, the value of a narrower data type can be converted to a value of a wider data type. This is called a widening primitive conversion.
long l = 10; // Widening primitive conversion: long <— int
An implicit cast happens when you’re doing a widening conversion.
Narrowing primitive conversion
Converting from a wider primitive type to a narrower primitive type is called a narrowing primitive conversion.
float a = 100.001f;
int b = (int)a; // Explicit cast, the float could lose info.
Narrowing primitive conversion requires an explicit cast, where you tell the compiler that you are aware of the danger(“possible loss of precision/information”) and accept full responsibility.
Method Overloading and Primitive Widening
package com.test;
package com.test;
public class PrimitiveMethodOverloading {
public void method(int x) { System.out.print(“int “); }
public void method(long x) { System.out.print(“long “); }
public void method(double x) { System.out.print(“double “); }
public static void main(String[] args) {
PrimitiveMethodOverloading pmo = new PrimitiveMethodOverloading();
byte b = 5; short s = 5; long l = 5; float f = 5.0f;
pmo.method(b);
pmo.method(s);
pmo.method(l);
pmo.method(f);
}
}
Output:int int long double
The calls that use byte and the short arguments are implicitly widened to match the version of the method() that takes an int. The call with the long uses the long version of method(), and finally, the call that uses a float is matched to the method that takes a double.
Related Article : Exploring Primitive Data Types in Java