// Tutorial //

Java Tricky Interview Questions

Published on August 3, 2022
Default avatar
By Pankaj
Developer and author at DigitalOcean.
Java Tricky Interview Questions

While we believe that this content benefits our community, we have not yet thoroughly reviewed it. If you have any suggestions for improvements, please let us know by clicking the “report an issue“ button at the bottom of the tutorial.

Sometime back I wrote an article on Top 50 Java Programming Questions. Our readers liked it a lot. So today we will look into some tricky interview questions in Java.

Java Tricky Interview Questions

These are programming questions but unless you have a deep understanding of Java, it will be hard to guess the output and explain it.

1. Null as Argument

We have overloaded functions and we are passing null. Which function will be called and what will be the output of the program?

public class Test {
	public static void main(String[] args) {
		foo(null);
	}
	public static void foo(Object o) {
		System.out.println("Object argument");
	}
	public static void foo(String s) {
		System.out.println("String argument");
	}
}

2. Use “L” for long

Can you guess the output of the below statements?

long longWithL = 1000*60*60*24*365L;
long longWithoutL = 1000*60*60*24*365;
System.out.println(longWithL);
System.out.println(longWithoutL);

Explanation of Null Argument Tricky Question

According to Java specs, in case of overloading, the compiler picks the most specific function. Obviously String class is more specific than Object class, hence it will print “String argument”. But, what if we have another method in the class like below.

public static void foo(StringBuffer i){
	System.out.println("StringBuffer impl");
}

In this case, the Java compiler will throw an error as “The method foo(String) is ambiguous for the type Test”. String and StringBuffer have no inheritance hierarchy. So none of them are more specific to others. A method is more specific than another if any invocation handled by the first method could be passed on to the other one without a compile-time type error. We can pass String as a parameter to Object argument and String argument but not to the StringBuffer argument method.

Explanation for Long Variable

The output of the code snippet will be:

31536000000
1471228928

We are explicitly creating the first variable as long by adding an “L” suffix. So the compiler will treat it as long and assign it to the first variable. For the second statement, the compiler will perform the calculation and treat it as a 32-bit integer. Since the output is outside the range of integer max value (2147483647), the compiler will truncate the most significant bits and then assign it to the variable. Binary equivalent of 1000*60*60*24*365L = 011101010111101100010010110000000000 (36 bits). After removing 4 most significant bits to accommodate in 32-bit int, the new value = 01010111101100010010110000000000 (32 bits). This is equal to 1471228928 and hence the output. Recently I have created a YouTube video series for java tricky programs.

You can checkout more java example programs from our GitHub Repository.


Want to learn more? Join the DigitalOcean Community!

Join our DigitalOcean community of over a million developers for free! Get help and share knowledge in our Questions & Answers section, find tutorials and tools that will help you grow as a developer and scale your project or business, and subscribe to topics of interest.

Sign up
About the authors
Default avatar
Pankaj

author

Developer and author at DigitalOcean.

Still looking for an answer?

Was this helpful?

I think your explanation of question 2 is not complete, you don’t make it clear that the L modifies only the constant 365… The multiplications are executed left to right, so in the first line of the example 1000*60*60*24 is computed in 32-bit arithmetic (it fits). The last operation multiplies that result by a long (365L) which forces the promotion to 64 bit. Observe: jshell> 1000*60*60*24 $4 ==> 86400000 jshell> 1000*60*60*24*365L $5 ==> 31536000000 jshell> 1000*60*60*24*365*1L $6 ==> 1471228928 jshell> 1000*60*60*24*365 $7 ==> 1471228928

- Chuck

    public class Test { public static void main(String args[]) { nullCheck(null); } public static void nullCheck(String s) { System.out.println(“string”); } public static void nullCheck(Object s) { System.out.println(“object”); } } //output String can anyone explain to me why out is String?

    - Rajesh pawar

      public static void main(String[] args) { method(null); } public static void method(Object o) { System.out.println(“Object impl”); } public static void method(int s) { System.out.println(“Integer impl”); } public static void method(String s) { System.out.println(“String impl”); } could you explain to my Why the System print “String impl”. I couldn’t no understand it. I am sorry ab this silly question. bcoz im noob on java. Many thank.

      - Logan

        public class HelloWorld { public static void main(String args[]){ boolean a = false; if(a=true){ System.out.println(“a is true”); }else{ System.out.println(“a is false”); } } } No one can prove this is an incorrect question. In the if part you are first assigning a is to true & then the if condition will be examined & it is found true.

        - Harsh Rasogi

          2 problem, compile time error…if(a==true), but u made it only =

          - suresh

            In my interview with Chetu India, there was one simple question which made me think twice: public class HelloWorld { public static void main(String args[]){ boolean a = false; if(a=true){ System.out.println("a is true"); }else{ System.out.println("a is false"); } } } So, i hope this would help someone.

            - Karam

              Answer to question 1 is wrong. Kindly correct. public class NullArgumentTest { public static void main(String[] args) { method(null); } public static void method(Object o){ System.out.println(“Object imple”+o); System.out.println(“test”); } public static void method(String s){ System.out.println(“object impl”+ s); } } /*****Output*******/ object implnull So, Kindly reply.

              - Karam

                Crystal Clear Explanation! but in the second case you converted the value to boolean, how can we achieve it in a min, any shortcuts?

                - Shiva

                  Nice explaination :)

                  - Manjunath

                    Great share. Thanks a lot! My score: 1/2. I could not answer Long prob right.

                    - Rishi Raj