Java Strings are Immutable - Here's What That Actually Means

  Рет қаралды 622,688

Coding with John

Coding with John

Күн бұрын

Пікірлер: 763
@etainad0085
@etainad0085 3 жыл бұрын
Hey John! I do not leave comments often, so this is a special event. I am currently learning Java at university and at home, and I wanted to tell you how much your videos are helping me. Your simple way of teaching is amazing for new learners, and I find your channel criminally underrated. Keep on uploading, Im sure youll get big on KZbin, a 100%!
@CodingWithJohn
@CodingWithJohn 3 жыл бұрын
Thanks a ton! I'll keep working on it, glad it's helping you!
@cagan8
@cagan8 2 жыл бұрын
Was going to say the same, usually programming videos are either boring or not engaging and taught well. This is completely opposite, very clear and understandable. Thank you
@alexwatts1375
@alexwatts1375 2 жыл бұрын
The best creators bubble to the top!
@snowwhite2146
@snowwhite2146 2 жыл бұрын
@@CodingWithJohn Same here. I have a Java exam in June and your videos are a good revision for me. Many thanks.
@csgrinds
@csgrinds 2 жыл бұрын
Recommend if you're serious about mastering Java that you read e.g. Joshua Bloch rather than watching needlessly long youtube presentations. No criticism of this video intended.
@mohitsanghai5455
@mohitsanghai5455 2 жыл бұрын
Thanks a lot for the crisp and clear video, John. Just to summarize String Immutability Benefits - 1) Usage of String pool, saving tons of memory and hashCode calculation 2) safe for multithreading 3) Removes any security threat by not allowing hackers to change referenced string values to cause security issues in the application
@bobfarker4001
@bobfarker4001 Жыл бұрын
You basically summarized the summary.
@Atarian6502
@Atarian6502 7 ай бұрын
Thanks for summary. Question regarding #1: Do I understand this correctly: the String pool saves the memory ONLY if you have two or more identical string variables (they point to the same piece of memory), but it wastes memory EVERY time you are changing the strings (it uses new piece of memory for the whole new string even if you change only one letter)?
@MrYourSalvation
@MrYourSalvation 2 жыл бұрын
Plus one interesting thing - due to String's immutability and presense of a string pool - the hashCode() method is calculated only the first time and saved as a value inside String object. Therefore when you call hashCode() method second time (e.g. on another variable with the same literal value) - it will just return stored value, no need to calculate hash code again.
@finmonster5827
@finmonster5827 2 жыл бұрын
ґалічєнин
@annaburdanova8307
@annaburdanova8307 2 жыл бұрын
Yura, thank you for sharing this interesting fact, the video itself and the comments are a real treasure for a Java learner!
@fabio.1
@fabio.1 Жыл бұрын
👍
@CodingWithJohn
@CodingWithJohn 8 ай бұрын
Really cool!
@NuanDaa
@NuanDaa 2 жыл бұрын
Dude I’m in bootcamp now for 6 months and no coding background. I just watched your video and I can say you have a best teaching technique that super understandable. You just got a subscriber. Thanks.
@AdrianWP_T
@AdrianWP_T Ай бұрын
I watched your videos countless times while doing my online courses. (I got my degree in 2005 in mechanical engineering but made a serious career change this year) Now, years down the line I'm sitting as an intern as a junior software developer (at age 42), and just watched yet another video. Your explanations are crystal clear. Thanks for the effort in creating them - much appreciated.
@alexz4006
@alexz4006 2 жыл бұрын
I always had a question about this topic. I read in a book about java, that strings were immutable, but it never went so much into detail. This is a very good video. Thanks for sharing.
@jiro.nemo.1
@jiro.nemo.1 2 жыл бұрын
Ive been using Java as a student for nearly 5 years now, and your content has been completely mind-blowing to me. Made me adopt the "I know nothing" attitude and relearn everything.
@edwardthng2502
@edwardthng2502 2 ай бұрын
Im literally studying for AP CS and i couldnt understand why a new string would give a false output, until I came across your video. Your a lifesaver.
@rahulshetty9335
@rahulshetty9335 2 жыл бұрын
Never even used Java a lot but I have been asked this question in interview. But this is the first time I understood what I was telling the interviewer.
@Hufsa
@Hufsa 2 жыл бұрын
first time in this channel and it's absolutely great to dedicate a specific video to talk only about immutable objects in less than 10 minutes, perfectly clear!
@LeninMcDonalds
@LeninMcDonalds 2 ай бұрын
John you have a gift for teaching. Only a Java master can explain the basics with such clarity to newbies.
@praveen123ist
@praveen123ist 2 жыл бұрын
I think I'll never look back again at why string is immutable, you made it super clear 👌🙏 awesome!!!!
@zishanamin3607
@zishanamin3607 2 жыл бұрын
Protect this man at all costs. Best explanations on Java concepts on the internet
@abolfazlsaravani2214
@abolfazlsaravani2214 2 жыл бұрын
God I love Java, after 5 years of Java programming, I still love how it works.
@matthewharrison3921
@matthewharrison3921 2 жыл бұрын
You have a talent for explaining things in a concise and easy to process manner. Thank you, sir!
@CodingWithGhostInCode
@CodingWithGhostInCode 2 жыл бұрын
I thought I had a firm grasp of what it means when they say Strings are immutable. After watching this video, Everything i thought i knew went straight outta the window. Thanks John. Way to make things understandable.
@Veganzza
@Veganzza Жыл бұрын
Man, you are so amazing. I've read many guides about immutable string but none of them is as clear as your explanation
@misspotato813
@misspotato813 2 жыл бұрын
I'm self teaching Java currently, I have a lot of questions about the "whys" and "hows" but currently the JavaDocs are a bit too advanced for me. This really helped!
@Rational_Human1
@Rational_Human1 2 жыл бұрын
@@jake9854 which dark age r u living in ?
@Fadhelalmalki
@Fadhelalmalki 4 ай бұрын
I can swear this man is really a man and know how I think giving the needed answer
@codingweb3904
@codingweb3904 2 жыл бұрын
Knew all this but still his way of explaining held me till the end.... His way of teaching is just amazing
@swapode
@swapode 2 жыл бұрын
I think you're kinda missing the main reason why Strings are immutable: You can't really have sensible mutable Strings since you can't change their length without moving everything to newly allocated memory on the heap which is incredibly expensive. I absolutely see your points as benefits, in fact I think Rust has proven that the whole mutable by default approach is a mistake, but it might have been a good idea to go into the actual reason a bit.
@XD-nj7bc
@XD-nj7bc 2 жыл бұрын
I can think of multiple ways that you can change your String length during runtime without coping (at least most of the time). Lists, Allocating more than cou need and and only get new memory when you run out.
@watertrainer3992
@watertrainer3992 2 жыл бұрын
@@XD-nj7bc allocating more than you need doesn't really solve the problem though, as you'd then just use more than you need, making it more expensive than immutable Strings
@XD-nj7bc
@XD-nj7bc 2 жыл бұрын
@@watertrainer3992 of course it is not cheaper than not mutable strings but you can then change the size without the copying he mentionend.
@swapode
@swapode 2 жыл бұрын
@@XD-nj7bc I put the word "sensible" in there for a reason 🙂
@garybuttherissilent5896
@garybuttherissilent5896 2 жыл бұрын
@@XD-nj7bc yeah he put the word "sensible" in there for a reason bruh
@learnjavaprogramming7132
@learnjavaprogramming7132 2 жыл бұрын
I don't have a words John sir, you are a real teacher I've ever seen , iam very lucky becouse of i found your vedio ☺️☺️
@matthewmoore1307
@matthewmoore1307 2 жыл бұрын
I love how you’re drawing out with examples as you explain
@drewbruggman
@drewbruggman 2 жыл бұрын
There was an error i was dealing with ages ago that i couldn't figure out and this video made that error make perfect sense, thank you!
@wedifilipoprogrammers1073
@wedifilipoprogrammers1073 2 жыл бұрын
I always procrastinated to search about strings being immutable and here its recommended by KZbin
@JessePoage
@JessePoage 2 жыл бұрын
Again, thank you for explaining concepts better than most professors
@perox1982
@perox1982 2 жыл бұрын
Now Everything has sence. I know many teachers that needs THIS VIDEOS. You Rocks John.
@jayskieeee
@jayskieeee 2 жыл бұрын
i wasn't aware of the benefits of immutability, even though i knew exactly what immutability means. thanks for the tid bits!
@THE16THPHANTOM
@THE16THPHANTOM 2 жыл бұрын
the coolest thing about the immutable part(to me) is the multiple thread point. i have come to appreciate that after so many times i have replicated that fact for my objects while trying to avoid the synchronized keyword.
@emekaukwuoma3359
@emekaukwuoma3359 3 жыл бұрын
Learnt a whole lot about string immutability in 7minutes than I have in a year. Lol. Nice one
@anluong8103
@anluong8103 2 жыл бұрын
Thanks so much. I've just come up with an interview question about this subject this morning. Luckily I watched your video the night before :)
@haoshecn
@haoshecn 2 жыл бұрын
Hi, John. Love your tutorials, but I think there is a little thing you didn’t explain in details here. When you new a string “John”, the object is indeed created in the heap, but “John” is still crated inside string pool. There is a reference inside the object pointing towards “John”. So, you actually created two objects when you use ‘new’ keyword to create a string.
@idkidkidk3333
@idkidkidk3333 3 жыл бұрын
Thank you! I will for sure be checking out more of your videos. You explained everything very clearly!
@drewbhardwaj
@drewbhardwaj 2 жыл бұрын
probably the best teacher for coding.🙏🙏
@SuprousOxide
@SuprousOxide 2 жыл бұрын
Strings are also very commonly used as keys in Map collections. If you insert a value in a map with a key, and then change the key object , you will no longer be able to look up that value with the original key. And with some map types,may have trouble looking up other keys because you have a key stored in the wrong place.
@wamikgildiev6632
@wamikgildiev6632 Жыл бұрын
When you add a value to a map you specify a key (a String in our case). A key is not an object, it's just a pointer to String object in memory. That String object is used to compute a hash code, and to find a bucket index later. So the question is Does Hashmap store a pointer to that String object and why if it already has computed the hash code? I could use Integer or any other class as HashMap key, but they are final.
@SuprousOxide
@SuprousOxide Жыл бұрын
@@wamikgildiev6632 It needs to keep a the actual key around, not just the hash code, because of hash collisions. If two keys have the same hash-code, you need to compare the actual key values to tell which (if either) is pointing at the value you want. If you actually make a copy of the key when you insert it, that would probably work, but I think most implementations assume your key is immutable.
@hagnap
@hagnap 2 жыл бұрын
Such a simple topic explained so well, wish they explained it like this in my early CS courses
@sourav5449
@sourav5449 10 ай бұрын
This is the best explanation of Immutability on youtube You are a gem 💎
@BlackHazama
@BlackHazama 2 жыл бұрын
Never fully understood why strings were immutable or the reason behind them. Thank you!
@rajivseeparsad6005
@rajivseeparsad6005 2 жыл бұрын
The best video to understand why String literals are immutable
@swastikmohapatra4665
@swastikmohapatra4665 2 жыл бұрын
i have to say i learn something new every day via this channel .
@hanikhellafi4872
@hanikhellafi4872 2 жыл бұрын
Man I just discovered your channel and I find your content amazing. This is the kind of depth I was looking for regarding string immutability.
@nothappyz
@nothappyz 2 жыл бұрын
Worked with java for years, and never knew the pool thing. Amazing
@sb-zn4um
@sb-zn4um 2 жыл бұрын
finally an understanding of why .equals was always preferential over ==
@maresolaris
@maresolaris 2 жыл бұрын
Finally! I finally understand what immutable actually means. Thank you for this clear explanation.
@dmitriirodionov
@dmitriirodionov 2 жыл бұрын
Outstanding and easy to understand explanation! Thank you for this video!
@supun_sandaruwan
@supun_sandaruwan 2 жыл бұрын
you are the best java teacher that i saw on the youtube because you are cleary explain what is the behind theory thank you very much 🤩💖
@marciomartins4111
@marciomartins4111 2 жыл бұрын
I am a brazilian developer. I see your videos to strudy English. Thank you.
@ragore7947
@ragore7947 2 жыл бұрын
John, you are [ immutably ] awesome!
@ChaseDetrick
@ChaseDetrick Жыл бұрын
This was fantastic, thank you so much! I've been struggling a lot in my comp sci classes because the professor refuses to go over theory, so this is wonderful :) You've won a very very faithful subscriber haha.
@billwu7367
@billwu7367 2 жыл бұрын
you are the best programmer combining teacher as i ever met!support!
@rajeshchattopadhyaya2805
@rajeshchattopadhyaya2805 2 жыл бұрын
I am currently learning Java your videos give deeper understanding of Java thank you very much!
@rhitamdutta1996
@rhitamdutta1996 2 жыл бұрын
Holy shit the way you explain things is so simple and lucid, subbed!!!
@mohitjaiswal3526
@mohitjaiswal3526 2 жыл бұрын
Now , I really understand . Why Java Strings are Immutable? Thank you John Sir
@arshandubey
@arshandubey 2 жыл бұрын
To the point , Every bit of information provided in just 7 minutes. SUBSCRIBED !!!
@MIchaelArlowe
@MIchaelArlowe 2 жыл бұрын
One of the saner innovations given to us by Java.
@Pythonology
@Pythonology Жыл бұрын
oh man, great explanation! So, that is why it is better to use .equals() instead of == when comparing Strings.
@pgm2004
@pgm2004 2 жыл бұрын
this man really out here saving my grades. god BLESS
@abhiniveshl676
@abhiniveshl676 Жыл бұрын
Crisp and clear
@pkmishra2359
@pkmishra2359 2 жыл бұрын
Thanks john , finally I understand why Strings are immutable .
@h-girlradio4699
@h-girlradio4699 2 жыл бұрын
Thank you so much for explaining this!! I never truly got a grasp on what was meant by Strings being immutable but you explained it perfectly!!
@simonjunior184
@simonjunior184 3 жыл бұрын
Very helpful demonstration of the concept. I hardly found other videos confusing to understand. Keep up the great job bro!
@herrbonk3635
@herrbonk3635 2 жыл бұрын
But you find this one confusing to understand??
@simonjunior184
@simonjunior184 2 жыл бұрын
@@herrbonk3635 I found this one very clear and straight forward to understand. I went through the video along coding on my IDE.
@herrbonk3635
@herrbonk3635 2 жыл бұрын
@@simonjunior184 Like most other videos then? (You said you hardly found them confusing, which means that you don't find them confusing.)
@ronniesuvillian4893
@ronniesuvillian4893 2 жыл бұрын
WOWW!! I am a C++ Developer and i dont even know java, but this discussion was really interesting. Thanks for the information John!!
@amaanmohammad1190
@amaanmohammad1190 2 жыл бұрын
Simple Concise and to the point.
@mirzaaqeel
@mirzaaqeel 2 жыл бұрын
Crystal clear with examples. Hats off to you.
@TG-ri3mu
@TG-ri3mu 3 жыл бұрын
Wow, wow, wow, FINALLY the explanation of immutable strings that l was looking for sooo long time! THANK YOU!
@jvsnyc
@jvsnyc 3 жыл бұрын
I always do the Trifecta, except that I am already Subscribed. One Very Important thing about String, or anything else being immutable, is that it makes such an object an ideal key for a HashMap or TreeMap (okay, basically any Map) or as a member of a HashSet or TreeSet (okay, basically any kind of Set). This is because if something is mutable, and you use it as a key in a Map or as a member of a Set, and then someone goes ahead and changes its value, there is nothing in Java that magically goes and moves things around to make any and every Map or Set it would be found in to be "corrected". What you have instead is a broken Set or Map which will just yield incredibly confusing, crazy-pills behavior. So yeah, saves some space, yeah, makes threads safer, but also makes it safe as a key for a Map or as a Set member. This goes way beyond String to apply to "Why would I make anything immutable, I like to change things?" but String is quite an excellent introduction to this notion. Of course, when you are changing String-like things a lot, or building them up in pieces, StringBuilder can be your best friend. But that is another video.
@ЛёхаБодунов-б7ж
@ЛёхаБодунов-б7ж 2 жыл бұрын
Yesterday I had this question in my mind and today I saw this video. Thanks!
@thunderstruck2727
@thunderstruck2727 2 жыл бұрын
Love your concise, clear, and informative videos! I normally try to read Oracle Tutorial Trails, but these videos are faster on certain topics. Plus you include great examples. Thank you!
@CodingWithJohn
@CodingWithJohn 2 жыл бұрын
Those are good too (as they should be, coming directly from Oracle) and I've used them to do some research on various topics I've done videos for. But yeah, often it's easier to watch a video on it. Thanks!
@thunderstruck2727
@thunderstruck2727 2 жыл бұрын
@@CodingWithJohn thanks for the reply! I’m a Comp Sci graduate who just finished my first year working a software job.
@fantasy9960
@fantasy9960 Жыл бұрын
Wow, this is the best explanation I can find on youtube! thank you john
@TechSY730
@TechSY730 2 жыл бұрын
Another benefit of immutable Strings, they allow implementation to really mess around with the internals transparently for performance. For example, in OpenJDK 8 and up, you can turn on a feature that will look at String instances with the same value, and point their backing char[] arrays (or byte[] arrays in OpenJDK 9 and up) to the same array (currently done by the garbage collector, not doing this all the time, so it doesn't waste time with short lived String instances). This wouldn't be safe if Strings were mutable, as then you would start tying unrelated String instances together when modifying. BTW: The command line parameter to turn this on is -XX:+UseStringDeduplication Sure, the String object itself must remain a different instance per the specification of "new", but now they point to the same array, thus taking up almost a little memory as if there was one. In this example, once the String instance pointed to by aThirdName lives long enough, it will get its backing array switched to the array used by the String in the string pool.
@huseyinkadioglu
@huseyinkadioglu Жыл бұрын
Simple and clear explanation John. I appreciate your work and effort. Amazing stuff!
@StobbeTime
@StobbeTime 2 жыл бұрын
Your an awesome teacher! I remember studying this topic in my book and could not understand it till now. Thanks.
@CuriousCyclist
@CuriousCyclist 2 жыл бұрын
Thank you for taking the time to make this video. I have liked, subscribed and am commenting. Cheers!
@prajwaltirpude8582
@prajwaltirpude8582 2 жыл бұрын
Great video. It is so clear now and books never explain it such great way
@Bersling
@Bersling 2 жыл бұрын
just completing the trifecta: yay, somebody does cool java videos about interesting topics in 2021 - subscribed!
@jayeshgautam7101
@jayeshgautam7101 2 жыл бұрын
Well, finally my confusion is gone. Thank you sir.
@alexandrprodan8794
@alexandrprodan8794 2 жыл бұрын
Wow, it's great video! Informative, comprehensive and not boring. Thank you very much!
@hannahdlh1
@hannahdlh1 2 жыл бұрын
The best explanation for this topic that I've seen so far. Thank you!!
@JustinBieberFanSA
@JustinBieberFanSA Жыл бұрын
John, I love your videos. Thank you. Studying for the OCA at the moment and you explain these concepts so well that I do not need to study them after watching the video. I understand it, which means I remember it forever because I understand how it works. I really appreciate your help!
@suneetlimkar
@suneetlimkar 2 жыл бұрын
Love how the KZbin recommendations algo work.glad i came across this video.. so well explained.. thank you
@teaadvice4996
@teaadvice4996 2 жыл бұрын
John I am so thankful for your existence
@codyprevatt
@codyprevatt 6 ай бұрын
You explain things extremely well.
@Ali-cf5lm
@Ali-cf5lm 2 жыл бұрын
Thank you John.. That was the best explanation for understanding what immutable means
@sergokovaltsov3427
@sergokovaltsov3427 2 жыл бұрын
Good to mention that String Pool in Java in fact is an implementation of Flyweight Pattern so anyone could do same cool stuff
@vasundharachintha5037
@vasundharachintha5037 Жыл бұрын
Your videos are amazing!!You really do make the concepts clear!!Thanks for such an amazing content.
@eiyukabe
@eiyukabe 2 жыл бұрын
Excellent video, and clearly explained.
@YT-vx9sz
@YT-vx9sz Жыл бұрын
My fucking god can't believe somebody actually taught this so clearly
@ThePorpoisepower
@ThePorpoisepower 2 жыл бұрын
I doubt there's a significant amount of memory saving in using the string pool, I mean how often are you going to have 3-4 copies of the same string, or maybe 2 copies of a significantly long string... And I'd have performance concerns about checking the pool whenever you create a new string, however you can easily recover that lost performance in when comparing two memory addresses vs the values in those memory locations. The other advantages brought up in the video are also very good reasons.
@rastkostajic5525
@rastkostajic5525 8 ай бұрын
Man! This is a mind blowing info for me. Never thought about this before! Thanks.
@tiagosilva9795
@tiagosilva9795 5 ай бұрын
What a great explanation! Thanks John!
@1dagmawi
@1dagmawi 3 жыл бұрын
You are easy to understand and always to the point. Glad I found you. Keep up the good work. Cheers.
@manojbhat1440
@manojbhat1440 2 жыл бұрын
I was getting recommendation for one week but i didn't watch .Today i got the same question in the exam😭😭
@arbchowdary832
@arbchowdary832 2 жыл бұрын
Save memory by using string pool. Provide security. And multi threading
@Jakypbekovich
@Jakypbekovich Жыл бұрын
Trifecta is done! Very well explained, thank you!
@CodingWithJohn
@CodingWithJohn Жыл бұрын
Thanks much!
@knockknockyoo5812
@knockknockyoo5812 2 жыл бұрын
His videos must-watch for junior developer
@bonnydavis6730
@bonnydavis6730 Жыл бұрын
Beautifully explained. Very informative . Thank you !!
@DragonKlavier
@DragonKlavier 2 жыл бұрын
Omg. I just discovered this magnifique Chanel to really learn Java.... thanks!!!!
@Coccoutube
@Coccoutube 2 жыл бұрын
Excellent lesson John! I'm learning a lot with you :)
@SSHHoneypot
@SSHHoneypot 2 жыл бұрын
I knew that this exists, but I never understood why. Now I do. Thanks :)))
@ishan2k1
@ishan2k1 2 жыл бұрын
This is great, tbh I learnt this in school but in a very crude manner and I wanted to see a simpler way to explain things! It’s also a very good starting point for heap and stack memories
.equals() vs. == in Java - The Real Difference
8:48
Coding with John
Рет қаралды 195 М.
Static vs Non-Static Variables and Methods In Java - Full Simple Tutorial
11:29
How Many Balloons To Make A Store Fly?
00:22
MrBeast
Рет қаралды 150 МЛН
Don't underestimate anyone
00:47
奇軒Tricking
Рет қаралды 21 МЛН
Java is ALWAYS Pass By Value. Here's Why
5:22
Coding with John
Рет қаралды 126 М.
31 nooby C++ habits you need to ditch
16:18
mCoding
Рет қаралды 827 М.
Multithreading in Java Explained in 10 Minutes
10:01
Coding with John
Рет қаралды 966 М.
Checked vs. Unchecked Exceptions in Java Tutorial - What's The Difference?
10:14
Generics In Java - Full Simple Tutorial
17:34
Coding with John
Рет қаралды 1,1 МЛН
Strings and StringBuilder in Java
1:27:29
Kunal Kushwaha
Рет қаралды 505 М.
Premature Optimization
12:39
CodeAesthetic
Рет қаралды 836 М.
Lambda Expressions in Java - Full Simple Tutorial
13:05
Coding with John
Рет қаралды 771 М.