null
/nŭl/
adjective
- Having no legal force; invalid. render a contract null and void.
- Of no consequence, effect, or value; insignificant.
- Amounting to nothing; absent or nonexistent. a null result.
String str = null;
means a String reference, named str, not pointing to anything
String str = "";
means a String reference, named str, pointing to an actual String instance. And for that String instance, it is a zero-length String, but it is still an actual object.
Just a little update with some diagram which hopefully can help you visualize that:
assume I have
String nullStr = null;
String emptyStr = "";
String myStr = "ab";
What it conceptually is something look like:
// String nullStr = null;
nullStr ----------> X pointing to nothing
// String emptyStr = "";
+------------------+
emptyStr ---------> | String |
+------------------+
| length = 0 |
| content = [] |
+------------------+
// String myStr = "ab";
+------------------+
myStr ------------> | String |
+------------------+
| length = 2 |
| content = [ab] |
+------------------+
(of course the internal structure of the String object is not the real thing in Java, it is just for giving you an idea)
More edit for the rationale behind NULL:
In fact in some language they do not provide concept of NULL. Anyway, in Java (or similar language), Null means semantically different from "empty" object. Use String as an example, I may have a People class with a String preferedTitle attribute. A Null preferedTitle means there is NO preferred title for that people (so that we need to derive and show the title for it, maybe), while a preferedTitle being an empty string means there IS a preferred title, and that's showing nothing.
Btw, although a bit off topic: concept of Null is seen as problematic for some people (because all those extra handling it need etc). Hence some languages (e.g. Haskell) are using some other ways to handle the situation where we used to use Null.
Answer from Adrian Shum on Stack OverflowString str = null;
means a String reference, named str, not pointing to anything
String str = "";
means a String reference, named str, pointing to an actual String instance. And for that String instance, it is a zero-length String, but it is still an actual object.
Just a little update with some diagram which hopefully can help you visualize that:
assume I have
String nullStr = null;
String emptyStr = "";
String myStr = "ab";
What it conceptually is something look like:
// String nullStr = null;
nullStr ----------> X pointing to nothing
// String emptyStr = "";
+------------------+
emptyStr ---------> | String |
+------------------+
| length = 0 |
| content = [] |
+------------------+
// String myStr = "ab";
+------------------+
myStr ------------> | String |
+------------------+
| length = 2 |
| content = [ab] |
+------------------+
(of course the internal structure of the String object is not the real thing in Java, it is just for giving you an idea)
More edit for the rationale behind NULL:
In fact in some language they do not provide concept of NULL. Anyway, in Java (or similar language), Null means semantically different from "empty" object. Use String as an example, I may have a People class with a String preferedTitle attribute. A Null preferedTitle means there is NO preferred title for that people (so that we need to derive and show the title for it, maybe), while a preferedTitle being an empty string means there IS a preferred title, and that's showing nothing.
Btw, although a bit off topic: concept of Null is seen as problematic for some people (because all those extra handling it need etc). Hence some languages (e.g. Haskell) are using some other ways to handle the situation where we used to use Null.
String str is a reference to an object. That is, it's not an actual object, but a variable which can contain the address of an object. When you assign a value to str you are changing the address stored within and changing which object it addresses.
null is reference value which points to no object. It's about as close to nothing as you can get. If you assign null to a String reference (String str = null;), you cannot then invoke any method of String using that reference -- all attempts will result in NullPointerException.
"" is a character String which contains no characters -- zero length. It is still an object, though, and if you assign its address to your String reference variable (String str = "";) you can then take its length, compare it to another String, extract its hashCode, etc.
What is Null?
elementary set theory - If we define $\mathrm{null}$ as nothing, is it correct to say $\emptyset = \{\mathrm{null}\}$? - Mathematics Stack Exchange
What does “null” mean and why is it here
Does 'void' mean return null in Dart, or simply just return nothing?
So I use C# and I often see many devs use null.
What and which kind of situation do you use this variable?
I am reading c# guide on programming book and I am on Clearing memory now and I haven't encountered null yet. Should I be worried?
The clear issue is that there is no way in classical mathematics to have an object that can be "nothing". It is not possible to have some $x$ that can "not exist" in some contexts.
This is unlike some programming languages where you can have a variable $x$ that gets instantiated to NULL, and then a list $[x]$ will be the empty list.
This is not a behaviour we allow in mathematics: something must be something, not nothing, so any set $X=\{x\}$ will contain one element (namely $x$) and therefore cannot be empty.
In case your question originates in a kind of perplexity regarding the word " nothing", it may be helpful to observe that modern logic uses quantification to translate this expression into symbolic language, which shows that " nothing " is not a name , and does not denote anything ( such as " nothingness" or " emptyness") .
For example, " there is nothing in box B " reads as
there is no $x$ such that $x$ is in box B.
Hence, logic helps to avoid the traps of ( ordinary language ) grammar. Though in ordinary language, we could say that "nothing is an element of the empty set", a sentence deceivingly suggesting that there is an entity , namely " nothing" , that is the subject of the predicate " being an element of the empty set" , logic tells us that our proposition simply means that :
the open sentence "$x$ is an element of $\emptyset$ " is false for every value of $x$.