🚀 Java Puzzle: Why this prints "100" even after using "final"? 🤯 Looks like a bug… but it’s actually Java behavior 👇 👉 Example: final int[] arr = {1, 2, 3}; arr[0] = 100; System.out.println(arr[0]); // 100 😮 👉 Wait… "final" but still changing? 🤔 💡 Reality of "final": - "final" → reference cannot change - NOT → object data cannot change 👉 So: - ❌ "arr = new int[]{4,5,6}" → not allowed - ✅ "arr[0] = 100" → allowed --- 🔥 Now the REAL twist 😳 final StringBuilder sb = new StringBuilder("Java"); sb.append(" Developer"); System.out.println(sb); // Java Developer 😮 👉 Again changing despite "final" 🔥 Golden Rule: 👉 "final" means: - You cannot point to a new object - But you CAN modify the existing object 💡 Common misconception: 👉 Many think "final = constant" (NOT always true) 💬 Did you also think "final" makes everything immutable? #Java #JavaDeveloper #Programming #Coding #100DaysOfCode #TechTips #JavaTips #InterviewPrep #Developers #SoftwareEngineering
Java final keyword behavior explained
More Relevant Posts
-
Most Java developers write code. Very few write good Java code🔥 Here are 10 Java tips every developer should know 👇 1. Prefer interfaces over implementation → Code to "List" not "ArrayList" 2. Use "StringBuilder" for string manipulation → Avoid creating unnecessary objects 3. Always override "equals()" and "hashCode()" together → Especially when using collections 4. Use "Optional" wisely → Avoid "NullPointerException", but don’t overuse it 5. Follow immutability where possible → Makes your code safer and thread-friendly 6. Use Streams, but don’t abuse them → Readability > fancy one-liners 7. Close resources properly → Use try-with-resources 8. Avoid hardcoding values → Use constants or config files 9. Understand JVM basics → Memory, Garbage Collection = performance impact 10. Write meaningful logs → Debugging becomes 10x easier Clean code isn't about writing more. It’s about writing smarter. Which one do you already follow? 👇 #Java #JavaDeveloper #SoftwareEngineering #BackendDevelopment #SpringBoot #CleanCode #Programming #Developers #TechTips #CodingLife
To view or add a comment, sign in
-
-
🚀 Java String vs StringBuffer vs StringBuilder — Explained Simply Understanding how Java handles memory, mutability, and performance can completely change how you write efficient code. Here’s the quick breakdown 👇 🔒 String Immutable (once created, cannot change) Stored in String Constant Pool (SCP) Memory efficient but costly in loops 🔐 StringBuffer Mutable + Thread-safe Slower due to synchronization Safe for multi-threaded environments ⚡ StringBuilder Mutable + Fast Not thread-safe Best choice for performance-heavy operations 🧠 Real Insight (Important for Interviews): 👉 "java" literals share the same memory (SCP) 👉 new String("java") creates a separate object 👉 s = s + "dev" creates a NEW object every time 👉 StringBuilder.append() modifies the SAME object 🔥 Golden Rule: Constant data → String Multi-threading → StringBuffer Performance / loops → StringBuilder ⚠️ Common Mistake: Using String inside loops 👇 Leads to multiple object creation → memory + performance issues 💬 Let’s Discuss (Drop your answers): Why is String immutable in Java? What happens when you use + inside loops? StringBuilder vs StringBuffer — what do you use by default? Difference between == and .equals()? Can StringBuilder break in multi-threading? 👇 I’d love to hear your thoughts! #Java #JavaDeveloper #Programming #Coding #SoftwareEngineering #InterviewPreparation #TechLearning #BackendDevelopment #PerformanceOptimization #Developers #JavaTips #LearnToCode #CleanCode
To view or add a comment, sign in
-
-
🚀 Java Trap: Why "finally" Doesn’t Change the Returned Value 👇 👉 Primitive vs Object Behavior in "finally" 🤔 Looks tricky… but very important to understand. --- 👉 Example 1 (Primitive): public static int test() { int x = 10; try { return x; } finally { x = 20; } } 👉 Output: 10 😲 Why not 20? 💡 Java stores return value before executing "finally" - "x = 10" stored - "finally" runs → changes "x" to 20 - But already stored value (10) is returned --- 👉 Example 2 (Object): public static StringBuilder test() { StringBuilder sb = new StringBuilder("Hello"); try { return sb; } finally { sb.append(" World"); } } 👉 Output: Hello World 😲 Why changed here? 💡 Object reference is returned - Same object is modified in "finally" - So changes are visible --- 🔥 Rule to remember: - Primitive → value copied → no change - Object → reference returned → changes visible --- 💭 Subtle concept… very common interview question. #Java #Programming #Coding #Developers #JavaTips #InterviewPrep 🚀
To view or add a comment, sign in
-
Java Puzzle for Today What will be the output of this program? String a = "Java"; String b = "Java"; String c = new String("Java"); System.out.println(a == b); System.out.println(a == c); System.out.println(a.equals(c)); Take a moment and guess before scrolling. Most beginners think the output will be: true true true But the actual output is: true false true Why does this happen? Because Java stores string literals in a special memory area called the String Pool. So when we write: String a = "Java"; String b = "Java"; Both variables point to the same object in the String Pool. But when we write: String c = new String("Java"); Java creates a new object in heap memory, even if the value is the same. That’s why: - "a == b" → true (same object) - "a == c" → false (different objects) - "a.equals(c)" → true (same value) Lesson: Use "equals()" to compare values, not "==". Small Java details like this can save you from real bugs in production. #Java #Programming #JavaPuzzle #Coding #SoftwareDevelopment
To view or add a comment, sign in
-
🤯 Every Java developer uses HashMap… But do you really know what happens when you call map.put("key", "value")? Let’s break it down 👇 ⚙️ Step 1 — Hashing Java calls hashCode() on the key, converting it into an integer. ⚙️ Step 2 — Bucket Calculation That hash is used to determine the index of the bucket (array slot): index = hashCode % array.length ⚙️ Step 3 — Storage The key-value pair is stored in that bucket as a Node. 🚨 What about collisions? When multiple keys map to the same bucket, a collision occurs. 👉 Before Java 8: Entries are stored using a LinkedList 👉 Java 8 and later: If entries exceed 8, it converts into a Red-Black Tree 🌳 for better performance 💡 Why this matters: ✔️ Average time complexity for get() and put() is O(1) ✔️ Not thread-safe (use ConcurrentHashMap in multi-threaded scenarios) ✔️ Always override hashCode() and equals() for custom key objects 🔑 Key Rule: If two objects are equal, they must have the same hashCode(). But the same hashCode() does not guarantee equality. This is one of the most commonly asked Java interview questions—and a fundamental concept every backend developer should truly understand. Have you faced this question in an interview? 👇 #Java #JavaDeveloper #BackendDevelopment #SpringBoot #JavaInterview #Programming #Coding #SoftwareEngineering
To view or add a comment, sign in
-
-
🚀 Day 20 – Optional in Java (Handling Nulls the Right Way) One common issue in Java: NullPointerException Today I explored how "Optional" helps handle this more safely. --- 👉 Traditional way: String name = user.getName(); if (name != null) { System.out.println(name); } --- 👉 Using "Optional": Optional<String> name = Optional.ofNullable(user.getName()); name.ifPresent(System.out::println); --- 💡 Why use "Optional"? ✔ Avoids direct null checks everywhere ✔ Makes code more readable and expressive ✔ Encourages better handling of missing values --- 💡 Useful methods: - "orElse()" → default value - "orElseGet()" → lazy default - "orElseThrow()" → throw exception if empty --- ⚠️ Insight: "Optional" is great, but should be used wisely—not for every variable, mainly for return types. --- 💡 Takeaway: Handling nulls properly = more robust and maintainable code #Java #BackendDevelopment #Java8 #Optional #CleanCode #LearningInPublic
To view or add a comment, sign in
-
📌 Optional in Java — Avoiding NullPointerException NullPointerException is one of the most common runtime issues in Java. Java 8 introduced Optional to handle null values more safely and explicitly. --- 1️⃣ What Is Optional? Optional is a container object that may or may not contain a value. Instead of returning null, we return Optional. Example: Optional<String> name = Optional.of("Mansi"); --- 2️⃣ Creating Optional • Optional.of(value) → value must NOT be null • Optional.ofNullable(value) → value can be null • Optional.empty() → represents no value --- 3️⃣ Common Methods 🔹 isPresent() Checks if value exists 🔹 get() Returns value (not recommended directly) --- 4️⃣ Better Alternatives 🔹 orElse() Returns default value String result = optional.orElse("Default"); 🔹 orElseGet() Lazy default value 🔹 orElseThrow() Throws exception if empty --- 5️⃣ Transforming Values 🔹 map() Optional<String> name = Optional.of("java"); Optional<Integer> length = name.map(String::length); --- 6️⃣ Why Use Optional? ✔ Avoids null checks everywhere ✔ Makes code more readable ✔ Forces handling of missing values ✔ Reduces NullPointerException --- 7️⃣ When NOT to Use Optional • As class fields • In method parameters • In serialization models --- 🧠 Key Takeaway Optional makes null handling explicit and safer, but should be used wisely. It is not a replacement for every null. #Java #Java8 #Optional #CleanCode #BackendDevelopment
To view or add a comment, sign in
-
🚀 CyclicBarrier in Java — Small Concept, Powerful Synchronization In multithreading, coordination between threads is critical ⚡ 👉 CyclicBarrier allows multiple threads to wait for each other at a common point before continuing — ensuring everything stays in sync 🔥 💡 Think of it like a checkpoint 🏁 No thread moves forward until all have arrived! 🌍 Real-Time Example Imagine a report generation system 📊 Multiple threads fetch data from different APIs 📡 Each processes its own data ⚙️ Final report should generate only when all threads finish 👉 With CyclicBarrier, you ensure: ✅ All threads complete before aggregation ✅ No partial or inconsistent data ✅ Smooth parallel execution 💻 Quick Code Example import java.util.concurrent.CyclicBarrier; public class Demo { public static void main(String[] args) { CyclicBarrier barrier = new CyclicBarrier(3, () -> System.out.println("All threads reached. Generating final report...")); Runnable task = () -> { try { System.out.println(Thread.currentThread().getName() + " fetching data..."); Thread.sleep(1000); barrier.await(); System.out.println(Thread.currentThread().getName() + " done!"); } catch (Exception e) { e.printStackTrace(); } }; for (int i = 0; i < 3; i++) new Thread(task).start(); } } 💪 Why it’s powerful ✔️ Keeps threads perfectly synchronized ✔️ Prevents incomplete execution ❌ ✔️ Reusable for multiple phases ♻️ 🔥 Final Thought 👉 It’s a small but powerful feature — use it wisely based on your project needs to ensure the right level of synchronization without overcomplicating your design. #Java #Multithreading #Concurrency #BackendDevelopment #SoftwareEngineering
To view or add a comment, sign in
-
10 Mistakes Java Developers Still Make in Production Writing Java code is easy. Writing Java code that survives production traffic is a different skill. Here are 10 mistakes I still see in real systems. 1. Using the wrong collection for the workload Example: - LinkedList for frequent reads - CopyOnWriteArrayList for heavy writes Wrong collection choice silently kills performance. 2. Ignoring N+1 query issues Everything looks fine in local. Production becomes slow because one API triggers hundreds of DB queries. 3. No timeout on external calls One slow downstream API can block request threads and take down the whole service. 4. Large @Transactional methods Putting too much logic inside one transaction increases lock time, DB contention, and rollback risk. 5. Blocking inside async flows Using @Async or WebFlux but still calling blocking DB/API code defeats the whole purpose. 6. Treating logs as observability Logs alone are not enough. Without metrics, tracing, and correlation IDs, debugging production becomes guesswork. 7. Thread pool misconfiguration Too many threads = context switching Too few threads = request backlog Both can hurt latency badly. 8. Bad cache strategy Caching without TTL, invalidation, or size control creates stale data and memory problems. 9. Not designing for failure No retries, no circuit breaker, no fallback. Everything works... until one dependency slows down. 10. Optimizing without measuring Most performance “fixes” are guesses. Always profile first. Then optimize. Final Thought Most production issues don’t come from advanced problems. They come from basic decisions made at the wrong place. #Java #SpringBoot #Microservices #BackendEngineering #Performance #SystemDesign #SoftwareEngineering
To view or add a comment, sign in
-
🚀 Day 2 – Subtle Java Behavior That Can Surprise You Today I explored the difference between "==" and ".equals()" in Java — and it’s more important than it looks. String a = "hello"; String b = "hello"; System.out.println(a == b); // true System.out.println(a.equals(b)); // true Now this: String c = new String("hello"); System.out.println(a == c); // false System.out.println(a.equals(c)); // true 👉 "==" compares reference (memory location) 👉 ".equals()" compares actual content 💡 The catch? Because of the String Pool, sometimes "==" appears to work correctly… until it doesn’t. This small misunderstanding can lead to tricky bugs, especially while working with collections or APIs. ✔ Rule I’m following: Always use ".equals()" for value comparison unless you explicitly care about references. #Java #BackendDevelopment #JavaBasics #LearningInPublic
To view or add a comment, sign in
Explore content categories
- Career
- Productivity
- Finance
- Soft Skills & Emotional Intelligence
- Project Management
- Education
- Technology
- Leadership
- Ecommerce
- User Experience
- Recruitment & HR
- Customer Experience
- Real Estate
- Marketing
- Sales
- Retail & Merchandising
- Science
- Supply Chain Management
- Future Of Work
- Consulting
- Writing
- Economics
- Artificial Intelligence
- Employee Experience
- Workplace Trends
- Fundraising
- Networking
- Corporate Social Responsibility
- Negotiation
- Communication
- Engineering
- Hospitality & Tourism
- Business Strategy
- Change Management
- Organizational Culture
- Design
- Innovation
- Event Planning
- Training & Development
final int a = 10; a = 20; I am not changing the reference I am just changing the data or object but still it's wrong why? I just want to know the concept behind it