Operator Plus(+) Overloading in Java

Java doesn't allow operator overloading yet, + is overloaded for class String.

 

Important points

  1. When you add a non string operand such as an integer or char to a String, the non-string operand is converted to a string and string concatenation happens.

  2. If both operands are char literals, the + operator performs addition rather than string concatenation by promoting each of the char-valued operands to int values through widening primitive conversion. 

 

Let us consider some possibilities through examples.

 

Examples

Example: + operator overloading precedence check

public static void main(String[] args) {
        final String first = "length: 10";
        final String second = "length: " + first.length();
        System.out.println("first and second are equal: " + first == second);
    }

  • It prints false and nothing else.

  • The + operator, whether used for addition or string concatenation, has more precedence than the == operator. Therefore, the parameter of the println method is evaluated like:

    • System.out.println(("first and second are equal: " + first) == second);

 

Example: String concatenation with short hand operator

Find output:

String str = "420";

str += 42;

System.out.print(str);

  • We can expand str += 42 as str=str+42.  When you add a non string operand such as an integer or char to a String, the non-string operand is converted to a string and string concatenation happens. Therefore “42” is concatenated to the “420” giving "42042".

 

Example: String concatenation and characters

public static void main(String args[]) {
            System.out.println('a');
            System.out.println('a' + 'b');
            System.out.println("H" + 'a' + 'b');
            System.out.println('a' + 'b'+"H");
            System.out.println('a' + 'b'+"H" + 'a' + 'b');
}

This will print:

a

195

Hab

195H

195Hab

  • Line 1: System.out.println('a');

    • System.out.println() is overloaded for character and it prints the character it represents and hence it prints a here.

  • Line 2 : System.out.println('a' + 'b');

    • Here both operands are char literals. Because neither operand is of type String, the + operator performs addition rather than string concatenation. The compiler evaluates the constant expression 'a' + 'b' by promoting each of the char-valued operands ('a' and 'b') to int values through widening primitive conversion. Widening primitive conversion of a char to an int zero extends the 16-bit char value to fill the 32-bit int. In the case of 'a', the char value is 97 and in the case of 'b', it is 9b, so the expression 'a' + 'b' is equivalent to the int constant 97 + 98, or 195.

  • Line 3: System.out.println("H" + 'a' + 'b');

    • Java doesn't allow operator overloading yet + is overloaded for class String. When you add a String to an integer or char it is converted to a string and hence string concatenation happens. So output is Hab.

  • Line 4: System.out.println('a' + 'b'+"H");

    • Java evaluates operands from left. So it adds ‘a’ and ‘b’ as string literals and then concatenates the result to the string “H” to get 195H.

  • Line 5: System.out.println('a' + 'b'+"H" + 'a' + 'b');}

    • Java evaluates operands from left. So it adds ‘a’ and ‘b’ as string literals and then concatenates the result to the string “H” to get 195H. Now this string 195H is added to ‘a’ and ‘b’, which will be string concatenation to get 195Hab.

Quick Notes Finder Tags

Activities (1) advanced java (1) agile (3) App Servers (6) archived notes (2) Arrays (1) Best Practices (12) Best Practices (Design) (3) Best Practices (Java) (7) Best Practices (Java EE) (1) BigData (3) Chars & Encodings (6) coding problems (2) Collections (15) contests (3) Core Java (All) (55) course plan (2) Database (12) Design patterns (8) dev tools (3) downloads (2) eclipse (9) Essentials (1) examples (14) Exception (1) Exceptions (4) Exercise (1) exercises (6) Getting Started (18) Groovy (2) hadoop (4) hibernate (77) hibernate interview questions (6) History (1) Hot book (5) http monitoring (2) Inheritance (4) intellij (1) java 8 notes (4) Java 9 (1) Java Concepts (7) Java Core (9) java ee exercises (1) java ee interview questions (2) Java Elements (16) Java Environment (1) Java Features (4) java interview points (4) java interview questions (4) javajee initiatives (1) javajee thoughts (3) Java Performance (6) Java Programmer 1 (11) Java Programmer 2 (7) Javascript Frameworks (1) Java SE Professional (1) JPA 1 - Module (6) JPA 1 - Modules (1) JSP (1) Legacy Java (1) linked list (3) maven (1) Multithreading (16) NFR (1) No SQL (1) Object Oriented (9) OCPJP (4) OCPWCD (1) OOAD (3) Operators (4) Overloading (2) Overriding (2) Overviews (1) policies (1) programming (1) Quartz Scheduler (1) Quizzes (17) RabbitMQ (1) references (2) restful web service (3) Searching (1) security (10) Servlets (8) Servlets and JSP (31) Site Usage Guidelines (1) Sorting (1) source code management (1) spring (4) spring boot (3) Spring Examples (1) Spring Features (1) spring jpa (1) Stack (1) Streams & IO (3) Strings (11) SW Developer Tools (2) testing (1) troubleshooting (1) user interface (1) vxml (8) web services (1) Web Technologies (1) Web Technology Books (1) youtube (1)