栈内存的一个特点是数据共享,这样设计是为了减小内存消耗,前面定义了 i=1, i和 1都在栈内存内,如果再定义一个 j=1,此时将 j放入栈内存,然后查找栈内存中是否有 1,如果有则 j指向 1。如果再给 j赋值 2,则在栈内存中查找是否有 2,如果没有就在栈内存中放一个 2,然后 j指向 2。也就是如果常量在栈内存中,就将变量指向该常量,如果没有就在该栈内存增加一个该常量,并将变量指向该常量。
如果j++,这时指向的变量并不会改变,而是在栈内寻找新的常量(比原来的常量大1),如果栈内存有则指向它,如果没有就在栈内存中加入此常量并将j指向它。这种基本类型之间比较大小和我们逻辑上判断大小是一致的。如定义i和j是都赋值1,则i==j结果为true。==用于判断两个变量指向的地址是否一样。i==j就是判断i指向的1和j指向的1是同一个吗?当然是了。对于直接赋值的字符串常量(如String s=“Hello World”;中的Hello World)也是存放在栈内存中,而new出来的字符串对象(即String对象)是存放在堆内存中。如果定义String s=“Hello World”和String w=“Hello World”,s==w吗?肯定是true,因为他们指向的是同一个Hello World。