0% found this document useful (0 votes)
2 views21 pages

25-Java String Pool Equals Types

The document provides an overview of Strings in Java, detailing their types, methods, and characteristics such as immutability and memory management through the String Pool. It explains the difference between immutable and mutable Strings, the use of '==' vs '.equals()' for comparison, and includes code examples to illustrate these concepts. Additionally, it emphasizes the importance of understanding String manipulation for Java programming and interviews.

Uploaded by

Rakesh kumar
Copyright
© All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
2 views21 pages

25-Java String Pool Equals Types

The document provides an overview of Strings in Java, detailing their types, methods, and characteristics such as immutability and memory management through the String Pool. It explains the difference between immutable and mutable Strings, the use of '==' vs '.equals()' for comparison, and includes code examples to illustrate these concepts. Additionally, it emphasizes the importance of understanding String manipulation for Java programming and interviews.

Uploaded by

Rakesh kumar
Copyright
© All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd

☕ Java Programming

String in Java
String Pool • == vs .equals() • Types of String
Immutability • StringBuilder • StringBuffer • Memory Diagrams • Interview Questions
Strings
---
Sequence of characters.
String is a class.
String is treated as an Object.

Types of String:
----
[Link] String: No change after creation.
[Link] String: We can change it after creation.

Immutable String:
---
Immutable String Created using:
String literal (“---”) without new keyword String contanst Pool
String literal (“---”) with new keyword  Normal Heap Area
String Methods:
----
[Link]() Return type String.
[Link]() Return type Int.
[Link]() Return type boolean.
[Link]() Return type boolean
[Link]()  Return type String.
[Link]() Converts string into array. Return type char []
[Link]()  RT boolean
[Link]()  RT boolean
[Link]() RT byte[]
[Link]() RT String
[Link]() RT String , Used to achieve consistency.
[Link]() RT String, Used to achieve consistency.
[Link]() RT String array: String[]
[Link] RT boolean
[Link]() Return type int =>First Occurence
[Link]()  Last Occurence
[Link]() RT String only
[Link]() RT int
[Link]()  Pusing string from Non constant Pool to constant Pool

import [Link];
public class Main {

public static void main([Link][] args) {

/*
String x="abcd";
String concat = [Link]("123");
[Link](concat);

int length = [Link]();


[Link](length);

*/

/*
String i = new String("123");
String j = new String("123");
[Link]([Link](j)); //true

String s = new String("ABC");


String r = new String("abc");
[Link]([Link](r)); //true

String xyz = " abcd ";


String trim = [Link]();
[Link](trim);
*/

/*
String test = "abcd123%*()UUU";
char[] charArray = [Link]();

for(char c : charArray){
if((c>=65 && c<=90) || (c>=97 && c<=122) ){
[Link](c);
}
}
*/

/*
String h = "abcd@[Link]";
boolean b = [Link]("@[Link]");
[Link](b); //treu
*/

/*
String k = "abcde";
char[] charArray1 = [Link]();
byte[] b = new byte[[Link]];

int i=0;
for(char c : charArray1){
b[i] = (byte)c;
i++;
}

String string = [Link](b);


[Link](string);
*/
/*

String k = "abcde";
byte[] bytes = [Link]();
String string = [Link](bytes);
[Link](string);
*/

String k = "abcdefghijk";
// String substring1 = [Link](4);
// [Link](substring1); //efghijk
String substring1 = [Link](4,7);
[Link](substring1); //efg

}
}

Mutable String:
---
[Link]([Link])
[Link]([Link])

🔷 String Kya Hai? — Basic Samjho


String Java mein ek class hai — primitive type nahi! Ye characters ka sequence hai — jaise "Hello" = H,e,l,l,o.
String ko double quotes mein likhte hain.

📌 String ke 3 Key 1. STRING EK CLASS HAI — [Link] — automatically import hoti hai
Facts 2. STRING IMMUTABLE HAI — ek baar bana, badal nahi sakta (character by
character fixed)
3. STRING POOL — Java ek special memory area maintain karta hai jahan
strings share hoti hain

String = Printed passport. Ek baar passport print ho gaya — uske characters badal nahi sakte. Kuch change
karna hai? Naya passport banao! Purana wahi rehta hai. Waise hi String immutable hai — modify nahi hoti,
naya String banta hai.

// String basics — literal vs new, immutability


// String banana — 2 tarike
String s1 = "Hello"; // Way 1: Literal — String Pool mein jaata hai
String s2 = new String("Hello"); // Way 2: new keyword — Heap par alag object

// String ek class hai — isliye itne methods hain!


[Link]([Link]()); // 5
[Link]([Link]()); // HELLO
[Link]([Link](1)); // e
[Link]([Link](1,4)); // ell
[Link]([Link]("ell")); // true

// String immutable — modification kiya toh naya String bana


String original = "Java";
String modified = [Link](); // Naya String "JAVA" bana
[Link](original); // Java ← abhi bhi same! Badla nahi
[Link](modified); // JAVA ← naya String

🔷 Immutability — String Badlta Kyun Nahi?


Immutable matlab — ek baar banao, phir change nahi ho sakta. Jab bhi String ko modify karte ho, Java actually ek
NAYA String object banata hai — purana wahi rehta hai!

Sochho tum ek whiteboard par 'Java' likha. Ab tum 'JAVA' banana chahte ho — lekin whiteboard permanent
marker se likha hai! Tum whiteboard erase karke naya likh sakte ho — lekin purana whiteboard hata nahi —
yahi hai immutability!
// Immutability — proof aur reasons
// Immutability — proof karo
String s = "Hello";
[Link]([Link](s)); // e.g. 12345 (object ka address)

s = s + " World"; // Lagta hai modify kiya — actually NAYA String bana!
[Link]([Link](s)); // e.g. 67890 ← alag address!
// Purana "Hello" object Heap par abhi bhi hai — GC collect karega baad mein

// ── Loop mein + operator ka problem ──


String result = "";
for (int i = 0; i < 5; i++) {
result = result + i; // Har iteration mein NAYA String — slow!
}
// 5 iterations mein 5 naye String objects ban gaye — memory waste!

// ── Immutability kyun? 3 Reasons ──


// 1. SECURITY: Password string koi change nahi kar sakta
// 2. THREAD SAFETY: Multiple threads ek hi String use kar sakti hain safely
// 3. STRING POOL: Sharing possible hai kyunki value change nahi hoti

🔷 String Constant Pool — Java ka Smart System


String Constant Pool (SCP) Heap memory ka ek special area hai. Jab tum literal syntax se String banate ho —
Java pehle pool mein check karta hai: kya yeh string pehle se hai? Agar hai — same object return karta hai. Naya
nahi banata!

String Pool = Library ka catalog. Agar library mein 'Harry Potter' pehle se hai — toh koi naya copy nahi kharidti
library — same book deti hai. Waise Java String pool mein pehle se rakhi String ko dobara nahi banata —
reuse karta hai!

3.1 — Literal se String Banana — Pool Mein Jaata Hai

🏊 String Constant Pool (Heap ka special area)


"Java" "Hello" "Patna" "Python"

String s1 = "Java"; → Pool mein "Java" nahi tha → banaya → s1 point karta hai
String s2 = "Hello"; → Pool mein "Hello" nahi tha → banaya → s2 point karta hai
String s3 = "Java"; → Pool mein "Java" PEHLE SE HAI → same object return!
s1 == s3 → TRUE! (dono same pool object par point kar rahe hain)

// Literal strings — pool reuse proof


// Literal — Pool use karta hai
String s1 = "Java";
String s2 = "Java";
String s3 = "Hello";

[Link](s1 == s2); // true ← dono same pool object!


[Link](s1 == s3); // false ← alag strings

// identityHashCode se prove karo:


[Link]([Link](s1)); // e.g. 12345
[Link]([Link](s2)); // e.g. 12345 ← SAME!
[Link]([Link](s3)); // e.g. 99999 ← DIFFERENT

String s1 = "Java"; String s2 = "Java"; — Pool mein ek hi object!


📦 STACK 🏔️HEAP
s1 → 0xP001 String Constant Pool:
s2 → 0xP001 ← same! 0xP001: "Java" ← s1 aur s2
s3 → 0xP002 dono yahan point
0xP002: "Hello" ← s3

Koi naya object nahi bana!

3.2 — new String() — Pool BYPASS karta hai!


Jab new keyword use karte ho — Java poochhhta bhi nahi pool mein — seedha Heap par naya object banata hai.
Isliye == false aata hai!

String s1 = "Java"; String s2 = new String("Java"); — 2 ALAG objects!


📦 STACK 🏔️HEAP
s1 → 0xP001 (pool) String Constant Pool:
s2 → 0xH500 (heap) 0xP001: "Java" ← s1

s1 == s2 → FALSE Regular Heap:


(alag addresses!) 0xH500: "Java" ← s2
(alag object!)
Content same — address alag!

// new String() — pool bypass, intern() fix


// new String() — Pool bypass
String s1 = "Java"; // Pool mein jaata hai
String s2 = new String("Java"); // Pool bypass — alag Heap object

[Link](s1 == s2); // false ← alag objects!


[Link]([Link](s2)); // true ← content same hai

// identityHashCode prove karta hai:


[Link]([Link](s1)); // e.g. 12345 (pool)
[Link]([Link](s2)); // e.g. 67890 (heap) ← ALAG!

// ── intern() — new String ko pool mein daal sakte ho ──


String s3 = new String("Java").intern(); // Pool mein daal do!
[Link](s1 == s3); // true! ← ab pool ka reference mil gaya

3.3 — Pool mein String kab NAYA banta hai?

🏊 Pool Rules — Step by Step 1: String literal likhte ho → JVM pool check karta hai
Step Step 2: Pool mein hai?
YES → same reference return — naya object nahi banta ✅
Memory save!
NO → naya String pool mein banata hai → reference return

Step 3: new String() likhte ho → Direct Heap par — pool check hi nahi
hota

String pool Java 7 se Heap mein aaya (pehle PermGen mein tha)
Pool ke objects bhi GC collect kar sakta hai (agar koi reference nahi)

🔷 == vs .equals() — Sabse Zyada Poocha Jaata Interview Mein!


Yeh concept Java interview mein hamesha aata hai! == aur .equals() dono compare karte hain — lekin KUCH
ALAG cheez compare karte hain. Samjho dhyan se:
== = Do ghar ka ADDRESS compare karo. Patna aur Patna ek hi sheher hai — lekin alag alag ghar hain toh
address alag! .equals() = Do ghar ka CONTENT compare karo. Dono ghar mein ek jaisi cheezein hain? Toh
equal!

Feature == (Double Equals) .equals() Method


Kya compare References (memory address) Content (actual characters)
karta?
Kab true aata? Dono same object point karein Dono ka content same ho
Primitives par? Kaam karta — value compare Kaam nahi — primitives mein .equals()
nahi
String literals? True (pool mein same object) True (content same)
new String()? False (alag objects!) True (content same)
Use karo jab? Null check: s == null String content compare karna ho
Risk? Galat result — confusing bugs! Safe — hamesha content compare
Example s1 == s2 → address same? [Link](s2) → content same?

4.1 — 4 Cases — Clearly Samjho


// 4 Cases — == vs .equals() har scenario mein
// ═══════════════════════════════════════════════════
// Case 1: Dono literals — Pool mein same object
// ═══════════════════════════════════════════════════
String a = "Hello";
String b = "Hello";
[Link](a == b); // true ← pool same object
[Link]([Link](b)); // true ← content bhi same

// ═══════════════════════════════════════════════════
// Case 2: Ek literal, ek new String()
// ═══════════════════════════════════════════════════
String c = "Hello";
String d = new String("Hello");
[Link](c == d); // false ← alag objects (pool vs heap)
[Link]([Link](d)); // true ← content same

// ═══════════════════════════════════════════════════
// Case 3: Dono new String()
// ═══════════════════════════════════════════════════
String e = new String("Hello");
String f = new String("Hello");
[Link](e == f); // false ← dono alag Heap objects
[Link]([Link](f)); // true ← content same

// ═══════════════════════════════════════════════════
// Case 4: Alag content
// ═══════════════════════════════════════════════════
String g = "Hello";
String h = "World";
[Link](g == h); // false ← alag objects
[Link]([Link](h)); // false ← content bhi alag

// RULE: String compare karte waqt HAMESHA .equals() use karo!


// == sirf null check ke liye use karo: if (s == null)

4.2 — String Concatenation aur Pool


// Concatenation aur pool — compile-time vs runtime
// Concatenation ka Pool pe effect

// ── Compile-time constant → Pool mein jaata hai ──


String s1 = "Hello" + " World"; // Compile time — compiler join karta hai
String s2 = "Hello World";
[Link](s1 == s2); // true ← compiler ne pehle se join kar diya!

// ── Runtime concatenation → Pool bypass ──


String part1 = "Hello";
String part2 = " World";
String s3 = part1 + part2; // Runtime — naya object bana, pool mein nahi!
[Link](s2 == s3); // false ← s3 pool mein nahi!
[Link]([Link](s3)); // true ← content same

// ── final variables → compile-time constant treat hote hain ──


final String f1 = "Hello";
final String f2 = " World";
String s4 = f1 + f2; // final hai — compile time join hota hai
[Link](s2 == s4); // true ← pool mein same object!

4.3 — equalsIgnoreCase(), compareTo() — Aur Useful Methods


// equalsIgnoreCase, compareTo, null-safe equals
// ── equalsIgnoreCase() — case ignore karke compare ──
String username = "RAKESH";
String input = "rakesh";
[Link]([Link](input)); // false
[Link]([Link](input)); // true ✅

// ── compareTo() — alphabetical order ──


String s1 = "Apple";
String s2 = "Banana";
[Link]([Link](s2)); // negative (A comes before B)
[Link]([Link](s1)); // positive (B comes after A)
[Link]([Link](s1)); // 0 (same)

// ── Safe equals — NullPointerException se bachao ──


String userInput = null;
// ❌ GALAT — NPE!
// if ([Link]("admin")) ...

// ✅ Way 1 — null check pehle


if (userInput != null && [Link]("admin")) {
[Link]("Login!");
}

// ✅ Way 2 — literal pehle rakho (best practice!)


if ("admin".equals(userInput)) { // null safe — NPE nahi aayega!
[Link]("Login!");
}
// "admin" null nahi ho sakta — isliye pehle aata hai

🔷 Types of String in Java — Teen Types


Java mein String banane ke teen main tarike hain — aur teen alag classes hain. Har ek alag situation ke liye best
hai:

📌 Teen Types 1. String — Immutable (nahi badlta) — [Link]


2. StringBuilder — Mutable, fast (single thread ke liye) — [Link]
3. StringBuffer — Mutable, thread-safe (multi-thread ke liye) —
[Link]

Type 1 — String (Immutable)


String = Patthar par khudha hua naam. Ek baar khud gaya — badal nahi sakta. Kuch change karna hai? Naya
patthar lo! Performance ke liye costly — lekin safe aur shareable.

// String — immutable type


// String — immutable — har modification naya object banata hai
String name = "Rakesh";
name = name + " Kumar"; // Naya String bana — "Rakesh" wahan hi raha
name = [Link](); // Phir naya — ab teen objects ban gaye!
[Link](name); // RAKESH KUMAR

// Kab use karo?


// ✅ Jab String change nahi hoga — fixed values
// ✅ Thread-safe environment
// ✅ HashMap keys (immutable hona zaroori)
// ✅ Configuration values

// ❌ Kab nahi use karo?


// ❌ Loop mein baar baar modify karna ho — StringBuilder better!

Type 2 — StringBuilder (Mutable, Fast)


StringBuilder = Whiteboard par likha hua. Erase karo, dobara likho — jitni baar chaho! Whiteboard alag nahi
kharidna — same whiteboard modify hota hai. Fast aur efficient!

// StringBuilder — mutable, append, insert, delete, reverse


// StringBuilder — mutable, single-thread ke liye fast
StringBuilder sb = new StringBuilder();
// append() — add karo end mein
[Link]("Hello");
[Link](" ");
[Link]("World");
[Link]([Link]()); // Hello World

// insert() — beech mein daal do


[Link](5, " Beautiful");
[Link](sb); // Hello Beautiful World

// delete() — hata do
[Link](5, 15); // index 5 to 14 remove
[Link](sb); // Hello World

// replace() — replace karo


[Link](6, 11, "Java");
[Link](sb); // Hello Java

// reverse() — ulta karo


[Link]();
[Link](sb); // avaJ olleH

// length() aur charAt()


[Link]([Link]()); // 10
[Link]([Link](0)); // a

// ── Loop mein StringBuilder — kitna fast! ──


long start = [Link]();
StringBuilder fast = new StringBuilder();
for (int i = 0; i < 10000; i++) {
[Link](i); // Ek hi object modify — naya nahi bana!
}
[Link]("StringBuilder time: " + ([Link]()-start) + "ms");
// StringBuilder time: ~5ms ← FAST!

String vs StringBuilder — Performance Comparison


// String vs StringBuilder — performance proof
// ── String + loop — SLOW (naye objects ban rahe hain) ──
long t1 = [Link]();
String slow = "";
for (int i = 0; i < 10000; i++) {
slow = slow + i; // Har baar NAYA String object! ← BAD
}
[Link]("String loop: " + ([Link]()-t1) + "ms");
// String loop: ~200ms ← SLOW!

// ── StringBuilder + loop — FAST ──


long t2 = [Link]();
StringBuilder sb = new StringBuilder();
for (int i = 0; i < 10000; i++) {
[Link](i); // Same object modify — naya nahi bana ← GOOD
}
[Link]("StringBuilder: " + ([Link]()-t2) + "ms");
// StringBuilder: ~5ms ← 40x FASTER!

// Rule: Loop mein String + kabhi mat karo — StringBuilder use karo!

Type 3 — StringBuffer (Thread-Safe)


StringBuffer = Bank ka shared notebook. Multiple bank tellers (threads) ek saath notebook mein likhna chahte
hain — lekin ek waqt mein sirf ek likh sakta hai (synchronized). Safe hai lekin thoda slow!

// StringBuffer — thread-safe, synchronized


// StringBuffer — StringBuilder jaisi hi — lekin thread-safe!
// Sab methods synchronized hain — ek waqt ek thread access kar sakta hai

StringBuffer sfb = new StringBuffer();


[Link]("Hello");
[Link](" World");
[Link](5, ",");
[Link]([Link]()); // Hello, World

// StringBuilder aur StringBuffer same methods hain!


// Fark sirf thread-safety ka hai:

// ── Kab kya use karo? ──


// String → String fixed/nahi badlega → use karo
// StringBuilder → Single thread mein modify → use karo (FAST)
// StringBuffer → Multi-thread mein modify → use karo (SAFE)

// Multi-thread demo (conceptual):


StringBuffer shared = new StringBuffer();
// Thread 1: [Link]("Hello"); // Safe!
// Thread 2: [Link](" World"); // Safe! Synchronized hai

// StringBuilder multi-thread mein:


StringBuilder unsafe = new StringBuilder();
// Thread 1 + Thread 2 ek saath → CORRUPT DATA possible!

Feature String (immutable) StringBuilder StringBuffer


Mutable? ❌ Immutable (nahi ✅ Mutable (badl sakta) ✅ Mutable (badl sakta)
badlta)
Thread-safe? ✅ Yes ❌ No ✅ Yes (synchronized)
Performance Slow (new object Fast Slower (sync overhead)
banata)
Use karo jab? String fixed ho Single thread modify Multi-thread modify
Memory pool? ✅ String Pool use karta ❌ Pool nahi ❌ Pool nahi
+ operator? New object banata har append() use karo append() use karo
baar
Package [Link] [Link] [Link]
Common methods length,charAt,substring append,insert,delete append,insert,delete

🔷 Common String Methods — Cheatsheet

// Common String methods — full cheatsheet


String s = " Hello, Java World! ";

// ── Length ──
[Link]([Link]()); // 22

// ── Case ──
[Link]([Link]()); // " HELLO, JAVA WORLD! "
[Link]([Link]()); // " hello, java world! "

// ── Trim (leading/trailing spaces hataao) ──


[Link]([Link]()); // "Hello, Java World!"
[Link]([Link]()); // Same — Unicode aware (Java 11+)

// ── charAt aur substring ──


[Link]([Link]().charAt(0)); // H
[Link]([Link]().substring(7)); // Java World!
[Link]([Link]().substring(7, 11)); // Java

// ── Search ──
[Link]([Link]("Java")); // true
[Link]([Link]("Java")); // 9 (first occurrence)
[Link]([Link]("l")); // 14
[Link]([Link](" H")); // true
[Link]([Link]("! ")); // true

// ── Replace ──
[Link]([Link]().replace("Java", "Python"));
// Hello, Python World!
[Link]([Link]().replaceAll("[aeiou]", "*"));
// H*ll*, J*v* W*rld! (regex — sab vowels replace)

// ── Split ──
String csv = "Rakesh,Priya,Ajay,Sunita";
String[] names = [Link](",");
[Link]([Link]); // 4
[Link](names[1]); // Priya

// ── Join ──
String joined = [Link](" | ", "Java", "Python", "C++");
[Link](joined); // Java | Python | C++

// ── isEmpty aur isBlank ──


[Link]("".isEmpty()); // true
[Link](" ".isEmpty()); // false (spaces hain)
[Link](" ".isBlank()); // true (Java 11 — only spaces)
// ── String to int / int to String ──
int num = [Link]("42"); // String → int
String str = [Link](42); // int → String
String str2 = [Link](42); // int → String

🏗️Complete Project — Student Registration System


String, StringBuilder, == vs equals — sab ek saath ek real project mein:

// Complete Project — Registration System with String, StringBuilder, equals


// Student Registration System — String concepts demo
import [Link];

public class RegistrationSystem {

// ── Username validation — equals use karo ──


static boolean isValidUser(String[] users, String input) {
for (String user : users) {
if ([Link](input)) return true; // .equals ✅
}
return false;
}

// ── Report generate — StringBuilder use karo ──


static String generateReport(String[] students, int[] marks) {
StringBuilder report = new StringBuilder(); // Fast!
[Link]("=== STUDENT REPORT ===").append("\n");
[Link]("-".repeat(30)).append("\n");

for (int i = 0; i < [Link]; i++) {


[Link]([Link]("%-15s : %d%n",
students[i], marks[i]));
}
[Link]("-".repeat(30));
return [Link](); // String mein convert karo at end
}

// ── Name format karo — String methods use karo ──


static String formatName(String raw) {
if (raw == null || [Link]()) return "Unknown";
raw = [Link]().toLowerCase();
return [Link]([Link](0)) + [Link](1);
}

// ── Pool demo — literal vs new ──


static void poolDemo() {
[Link]("\n── String Pool Demo ──");
String a = "Admin";
String b = "Admin";
String c = new String("Admin");

[Link]("a == b (literals): " + (a == b)); // true


[Link]("a == c (new): " + (a == c)); // false
[Link]("[Link](c): " + ([Link](c))); // true
[Link]("Lesson: Hamesha .equals() use karo!");
}

public static void main(String[] args) {

// Registered users
String[] users = {"rakesh", "priya", "ajay", "sunita"};

// Login test
[Link]("=== Login Test ===");
String[] attempts = {"RAKESH", "PRIYA", "Unknown", "ajay"};
for (String attempt : attempts) {
boolean valid = isValidUser(users, attempt);
[Link](attempt + " → " + (valid ? "✅ Login OK" : "❌ Invalid"));
}

// Name formatting
[Link]("\n=== Name Formatting ===");
String[] rawNames = {" RAKESH KUMAR ", "priya", null, " ", "AJAY"};
for (String n : rawNames) {
[Link]("'" + n + "' → '" + formatName(n) + "'");
}
// Report generation
[Link]("\n" + generateReport(
new String[]{"Rakesh", "Priya", "Ajay", "Sunita"},
new int[]{85, 92, 78, 88}
));

poolDemo();
}
}

// Output:
// === Login Test ===
// RAKESH → ✅ Login OK (equalsIgnoreCase works!)
// PRIYA → ✅ Login OK
// Unknown → ❌ Invalid
// ajay → ✅ Login OK
//
// === Name Formatting ===
// ' RAKESH KUMAR ' → 'Rakesh kumar'
// 'priya' → 'Priya'
// 'null' → 'Unknown'
// ' ' → 'Unknown'
//
// === STUDENT REPORT ===
// Rakesh : 85
// Priya : 92
// ...

⚠️Common Galtiyan — Dhyan Do!

// Common galtiyan — ==, null, loop +, immutability, isEmpty


// ── Galti 1: String compare mein == use kiya ──
String s1 = new String("Java");
String s2 = new String("Java");
// ❌ GALAT:
if (s1 == s2) [Link]("equal"); // Print nahi hoga!
// ✅ SAHI:
if ([Link](s2)) [Link]("equal"); // equal ✅

// ── Galti 2: Null String par .equals() call kiya ──


String user = null;
// ❌ GALAT — NullPointerException!
// if ([Link]("admin")) ...
// ✅ SAHI — literal pehle:
if ("admin".equals(user)) [Link]("match"); // No NPE!

// ── Galti 3: Loop mein + operator se String build kiya ──


// ❌ SLOW — har iteration mein naya String!
String result = "";
for (int i = 0; i < 1000; i++) result = result + i;
// ✅ FAST — StringBuilder use karo
StringBuilder sb = new StringBuilder();
for (int i = 0; i < 1000; i++) [Link](i);
String result2 = [Link]();

// ── Galti 4: Immutability bhool gaye ──


String name = "rakesh";
[Link](); // ❌ Kuch nahi hua! Return value ignore kiya
[Link](name); // rakesh ← nahi badla!
// ✅ SAHI — return value capture karo
name = [Link](); // Assign back karo
[Link](name); // RAKESH ✅

// ── Galti 5: isEmpty() vs isBlank() confuse kiya ──


String spaces = " ";
[Link]([Link]()); // false ← spaces hain!
[Link]([Link]()); // true ← sirf spaces (Java 11+)
// Validation mein isBlank() better hai!

📋 Quick Revision — Exam ke Liye

10 Sabse Zaroori Baatein


• 1. String kya hai: [Link] class — char sequence — immutable
• 2. Immutable matlab: badal nahi sakta — modification pe naya object banta hai
• 3. String literal: "Hello" → String Pool mein jaata hai — reuse hota hai
• 4. new String(): Pool bypass — alag Heap object — == se compare nahi milega
• 5. String Pool: Heap ka special area — same content ke liye ek hi object
• 6. == (address): Same object? — String mein unreliable — avoid karo
• 7. .equals(): Same content? — HAMESHA yahi use karo String compare mein
• 8. equalsIgnoreCase(): Case ignore — login/search mein useful
• 9. StringBuilder: Mutable — loop mein use karo — String + se fast
• 10. StringBuffer: StringBuilder jaisa — thread-safe — multi-thread mein use karo

Topic Rule / Syntax Easy Yaad Karo


String kya hai Immutable class — char[] ka Ek baar likha — nahi badla!
wrapper
String literal String s = "Hello" Pool mein jaata hai — reuse hota
new String() String s = new String("Hello") Pool bypass — alag Heap object
String Pool Heap ka ek special area Ek baar banao — sab share karo
== (address check) Same object? → true/false Patna ka address vs Patna ka content
.equals() Same content? → true/false Hamesha yeh use karo String mein!
equalsIgnoreCase() Case ignore karke compare "Java".equalsIgnoreCase("java") = true
intern() Pool mein daalo new String ko Pool ka membership dilao
Immutable kyun? Security + Thread safety + Passport copy nahi hoti — original rehta
Pool reuse
StringBuilder Mutable — append() se Loop mein + use mat karo — slow hoga
modify karo

Java Notes — String • String Pool • == vs .equals() • Immutability • StringBuilder • StringBuffer | Hinglish
Edition 🇮🇳

You might also like