Skip to main content

Why "F" and "L" suffix | (10.0F, 10L)

Let us take it this way, We will create their needs. So we will get why they are needed.

Try to guess, which functions will be executed in the following program:

public class MyClass {
    public static void main(String args[]) {
        MyClass obj = new MyClass();
        obj.fun1(10);
    }
    void fun1(byte val){
        System.out.println(val);
    }
    void fun1(int val){
        System.out.println(val);
    }
    void fun1(float val){
        System.out.println(val);
    }
    void fun1(long val){
        System.out.println(val);
    }    
}

It seems like every method is capable to run this program because 10 is still literal because It has no data type. Before Java, In previous technologies, this scenario gave an ambiguity error. But Java solves this problem by removing the concepts of literals. It means Java provide a data type immediately when these born. So here 10 is no more literal. Java provides Integer data type for it. So now it is of Integer type that's why the second method will be called.

By this way, default data types assigned to particular literals are as follow:

Integral Number(10)    =>   Integer
Floating Number(10.0)   => Double
Characters('a')         =>     Character
Boolean(true)          =>         Boolean

So If we write,
long var = 9223372036854775807;

java will give an error
/MyClass.java:5: error: integer number too large: 9223372036854775807
                      long lv = 9223372036854775807;
                                    ^
                     1 error

When we write 9223372036854775807, Java tries to make it Integer but it is going out of range of Integer. Because Java is a strictly typed language. I will through error.

Java solves this problem but suffix 'L' with the number, now Java will convert it into Long instead of Integer. and It will run fine,
long var = 9223372036854775807L;

Same as for double, because by default floating number is double so to convert these into the float, Java provides 'F'

Suffix 'L' and 'F' both are Not Case-Sensitive.

Now discuss one problem on the basis of this scenario, as Interviewer asks usually.

public class MyClass {
    public static void main(String args[]) {
        byte a = 10;
        byte b = 20;
        byte c = a + b;
    }
    

}
What will be Output of this? We can predict 30. But unfortunately, it will give an error. 
/MyClass.java:5: error: incompatible types: possible lossy conversion from int 
                  to byte
                  byte c = a + b;
                                   ^
                 1 error
Because Result of any operations is always literal, So 30 becomes Integer before assigning into c.



Comments

  1. Thank you.
    Actually i had come across this question in one interview. I have given the answer on logical way but with above theory behind it,now able to understand the real concept behind it.

    ReplyDelete
    Replies
    1. Thank you, Devendra. Your feedback and suggetions are important to us.

      Delete
    2. Hey Buddy please upload more topics. In java ocean lots of topic we have.

      Delete
    3. Sure Devendra, I am working on them.
      There is one FYI for you, Your email subscription has not been confirmed yet. Can you please subscribe JavaVines again and confirm from your inbox? Does it make sense?

      Delete
  2. A very usuful information,thanks for sharing

    ReplyDelete
    Replies
    1. This comment has been removed by the author.

      Delete
    2. Thank you very much for your precious feedback.

      Delete

Post a Comment

suggestions

Popular posts from this blog

Promises and Async-await in depth : Asynchronous Programming in Javascript

Promises and Asynchronous Programming One of the most powerful aspects of JavaScript is how easily it handles asynchronous programming. As a language created for the Web, JavaScript needed to be able to respond to asynchronous user interactions such as clicks and key presses from the beginning. Node.js further popularized asynchronous programming in JavaScript by using callbacks as an alternative to events. As more and more programs started using asynchronous programming, events and callbacks were no longer powerful enough to support everything developers wanted to do.  Promises  are the solution to this problem. Promises are another option for asynchronous programming, and they work like futures and deferreds do in other languages. A promise specifies some code to be executed later (as with events and callbacks) and also explicitly indicates whether the code succeeded or failed at its job. You can chain promises together based on success or failure in ways that make your code...

ChatGPT aur Google me kya difference hai?

  ChatGPT aur Google dono alag-alag hain. ChatGPT ek language model hai jo ki OpenAI dwara train kiya gaya hai. Iski madad se hum natural language text ko generate, understand, aur respond kar sakte hain. Google, on the other hand, ek search engine hai jo ki internet par available information ko search karne ki capability rakhta hai. ChatGPT language model ke through hum natural language text ko generate kar sakte hain, jese ki poetry, stories, articles and so on. Iski madad se hum human-like text ko generate kar sakte hain. Google, on the other hand, internet par available information ko search karta hai. Iske through hum kisi bhi topic ke bare me jankari le sakte hain. Dono alag hain, lekin kuch similarities bhi hain. Dono natural language text ke sath work karte hain. ChatGPT natural language text generate karne ke liye use kiya jata hai, aur Google natural language text ko search karne ke liye use kiya jata hai. ChatGPT ke through hum natural language text ko generate kar sakte...