Skip to main content

Difference between String ,StringBuffer & StringBuilder?



Run this simple java program and create scenerio of String object creation in your mind.You will see huge difference than expectation.

                               I would recommend to first try on your own then follow the solution .
As you execute the above line of codes in your Java Runtime Environment .As compiler
read the lines .In  case of 
                                   String a= new String("Hello");
       As it will allow compiler to create a new string object .It is always mandatory for 
compiler to allocate a memory space in heap whenever new keyword is used.So String
class object created successfully in heap with reference variable a.And a very important point 
need to be noted down that here  "new String("Hello');"  It will make a literal object in String 
pool with value "Hello".So total number of object created equals two.so if you print value of a
using System.out.println(a);  It will print Hello as reference variable for object a contain same 
value. Similarly it happens with  the next line  
                                     String b= new String("Java");
it also creates the same scenerio as String referenced above.But in case of next following line 
                                     String c="HelloJava";
In this case there will be a literal stored in constant pool.It also rise three most important question.

Que:What is difference between  constant pool and heap?
Que:What makes String immutable & why?
Que:How JVM utilize the need of constant pool?

As next lines of code executed it work as follow.In the given case when evaluation for
                                   System.out.print("c==a+b");

Here a & b are object of type String .While c is an string literal which contain value "HelloJava".
So when + operator work between two different object .It does not evaluate result equal to any 
String literal which is stored in Constant pool. So for "c==a+b" it will result to boolean result 
which comes out to be false.So only false will be printed.
In the following next line while evaluating  c=="Hello"+"Java";
It will work as operator overloading between two String literals.And as describe "Hello" &
"Java" both are stored in Constant bool which concat and result equals to c.
So true will pe printed  in System.out.print(c=="Hello"+"Java");

StringBuffer is faster than String when performing simple concatenations. In String
 manipulation code, character strings are routinely concatenated. 
      
         






Comments

  1. Toptal Software Developers Community. can be a good place to work

    ReplyDelete

Post a Comment

Popular posts from this blog

Design Discussion over Microservices Adaption

 Terms that are most commonly used in any microservices architecture Don't worry after watching so many new terms as below : Saga Pattern Bounded context Eventual consistency Event Command Execution  Event broker CDC (change data capture) event managment Domain driven design Event driven design CQRS (Command query responsibility segregation) Rollback operation  Asynchronous Callback operation Fault tolerance :Bulk Head & Circuit breaker Open API configurations Centralized logging ELK Stats aggregation Aggregates in Domain Driven Design FAT Domain VS Anemic Domain Ubiquitous Language  Event sourcing Event replay Scatter-Gather Pattern Saga Pattern:      A pattern which is the heart soul of any microservice architecture ,it is used to manage data consistency across multiple microservices in distributed transaction .It performs a sequence of local transactions which perform updation operation in services & publish a message or trigger the event. T...

AngularJs/javascript and Angular/typescript (version 2/4/latest) have a series of difference.

                         AngularJs vs Angular (Typescript)                                                 On basis of process of compilation          ANGULARJS : Angular Js  compiler  traverses the DOM looking for attributes . It takes two phase for compilation where initial phase  traverse the DOM and collect all of the directives. The result is a linking function.   Next  phase evolves combine the directives with a scope and produce a live view. Any changes in the scope model are reflected in the view, and any user interactions with the view are reflected in the scope model. This makes the scope model the single source of truth.