Monday, 22 December 2014

Difference between String Literal and String Object in Java

This is most confusing topic in java and its not given clearly in many websites what is the exactly difference between String Literal and String Object.And its a very basic question asked in interviews.
So here is my explanation on this:-

String are nothing but a sequence of characters for ex:"Hello".In java programming language string are objects.

The JVM maintains a special part of memory called "String Literal pool" or "String constant pool" where all string gets stored.This is done to avoid unnecessary creation of same object again and again which helps in saving memory as well as time.

When you declare a String as

String strName1="Kavita";

Here JVM first checks whether a String named "Kavita" already present in String pool.If yes,variable 'strName' refers to the object "Kavita". If no,then it creates an object "Kavita" in String pool and variable 'strName' points to this object.
This declaration creates ONE object.

Similarly, when you create another object as

String strName2="Kavita";

In this case , JVM checks the string "Kavita" in String pool.As "Kavita" object is already present in String pool. JVM returns the reference of "Kavita" object to variable 'strName2'.So NO objects gets created.

And both variable 'strName1' and 'strName2' points to the same object "Kavita" present in string pool.This way JVM save the memory and time in creation of string objects.If you call '==' operator on both the variable,then it will return TRUE.

String objects gets stored in heap area of memory.String pool is located in premgen area of heap in Java version 1.6 or before but in Java 1.7 , it is moved to heap area of memory.

When you declare String using new operator as,

String strName3=new String("Rob");

Here ,'new String("Rob")' will always a create an object in heap and another object "Rob" will be created which gets stored in String pool.The reference of new String("Rob") will be returned to variable strName3. So in this case,Two objects gets created.

Happy Learning. :)

Sunday, 21 December 2014

Important Eclipse Keyboard Shortcuts For Java Programmer

Here I am listing some basic and important eclipse keyboard shortcuts that every programmer should use while developing any application

The benefit of using shortcuts is it helps you to develop your application faster.

The list of shortcuts are as follows:

Create New Project
Open Resource (Java files,other files,folder,projects)
Close Current Opened File.
Close All Files

Copy Some text or line.
Paste text or line.
Cut text or line
Undo Last Action
Redo Last Action
Open find and replace dialog to find any word or strings of words.
Search Entire Workspace for file,words etc
Organize all imports and remove unnecessary imports
Select all text in class
Correct indention of selected text or of current line or whole class
Format all code in class
Comment / un-comment line
Add Block Comment around selection
Remove Block Comment
Save Current File.
Save All Files. 

Important Debug shortcuts :

Step Inside the function
Next step(line by line)
Step out of the function
Skip to next breakpoint

Saturday, 20 December 2014

Clear command line console and display bold size of string in Java Command Line Application

To clean console of your command line application,use following code :

   * This method clear the current screen  
   public static void clearScreen() {  

To make bold size of any string,

  public void boldSizeOfString()  
       String strNormalSize = "\033[0;0m";  
       String strBoldSize = "\033[0;1m";  
         System.out.println (strNormalSize + "My Name is Anthony Gonsalves" + strBoldSize);  

How to create jar and run from command line

In order to create runnable jar,You need to do following steps in Eclipse:

1) Right Click on your project.Select Export Option and then Select Runnable Jar File Option.

2) After Clicking Next, select the main class of your project in Launch configuration and Specify the path and name of jar file in Export destination.

3) Click Finish.

To Run Jar File,Follow the steps mentioned below:

1) Make Sure java path is set in Environment variable.
2) Open command Line
3) Go to path where Jar is generated. in this case : cd f:/aapps/
4) Run java -jar Test.jar

Detecting key events in Console application Using JLine

JLine is nothing but a java library for handling console inputs.It can detects various keys which System class can not detect.

For ex:you can not detect ESC key or ENTER key pressed in java.

JLine ConsoleReader object can detects special key using its readVirtualKey() function.
For more information about JLine.

You can download the jar from

For maven dependency refer this

Using Jline you can ROTATE the list using UP and DOWN arrow key.
For ex: If you want to rotate list of country names. using UP and DOWN arrow key

public String ArrowKeysForSelctingCountryName() throws IOException {  
           List<String> listCountry = new ArrayList<String>();  
           int i = 0;  
           boolean isValueSelected = false;  
           String strCountryName = null;  
           ListIterator<String> itr = listCountry.listIterator();  
           int key;  
           ConsoleReader consoleReader = new ConsoleReader();  
           while ((key = consoleReader.readVirtualKey()) != 10) {  
                // to clear previous list name ,you can customise it according to you.  
                for (int clear = 0; clear < 100; clear++) {  
                switch (key) {  
                // UP arrow key  
                case 65539:  
                     isValueSelected = true;  
                     for (; i < listCountry.size(); i++) {  
                          if (itr.hasNext()) {  
                               strCountryName =;  
                               Collections.rotate(listCountry, i);  
                          } else {  
                               while (itr.hasPrevious()) {  
                     if (i == listCountry.size() - 1) {  
                          while (itr.hasPrevious()) {  
                // Down Arrow Key  
                case 65540:  
                     isValueSelected = true;  
                     for (; i < listCountry.size(); i++) {  
                          if (itr.hasNext()) {  
                               strCountryName =;  
                               Collections.rotate(listCountry, i);  
                          } else {  
                               while (itr.hasPrevious()) {  
                     if (i == listCountry.size() - 1) {  
                          while (itr.hasPrevious()) {  
           if (key == 10 && strCountryName.length() > 0 && isValueSelected == true) {  
                return strCountryName;  
           return strCountryName;  

You can also implement AUTO-COMPLETE functionality using TAB key.
Here is the sample code : to implement auto completion of students names.

 public static void AutoCompleteSelectingStudentsName() throws IOException {  
         List<String> lStudentsName = new ArrayList<String>();  
         // convert into string array  
         String[] arrStudentsNames = lStudentsName.toArray(new String[lStudentsName.size()]);  
         ConsoleReader consoleReader= new ConsoleReader();  
         consoleReader.addCompletor(new SimpleCompletor(arrStudentsNames));  

Error :Arc dependent binaries in noarch package (CentOS 6.5)

This error mostly occurs when you try to create RPM and if binary files are present in project,then It gives this error.
This error most likely to occur in Linux distributions like CentOS,Ubuntu,OpenSuse.

In order to avoid this error,you should to add following line in .spec file which gets generated whenever you create rpm.

   %define _binaries_in_noarch_packages_terminate_build   0

To add this line in .spec file of your build,mention this declaration in pom.xml.