代碼:
public class TestNullAndNothing {
int a;//自動賦值為0;如果是對象,自動賦值為null
public static void main(String[] args) {
String s="";
System.out.println("長度為0的字符串:"+RamUsageEstimator.sizeOf(s));//打印所占內存大小
String ss=null;
System.out.println("字符串賦空值:"+RamUsageEstimator.sizeOf(ss));
int b=11;//變量不初始化編譯不能通過
System.out.println("全局變量不賦值:"+RamUsageEstimator.sizeOf(new TestNullAndNothing().a));
System.out.println("變量賦初值:"+RamUsageEstimator.sizeOf(b));
}
}
結果:
長度為0的字符串:40
字符串賦空值null:0
全局變量不賦值:16
變量賦初值:16
總結:
1.長度為0的字符串占內存
2.字符串賦null不占內存
(事實上,應該是字符串在棧中占了內存,但是堆中沒有占內存,即棧中是存在字符串對象ss的,但是沒有引用任何堆中的內容)
3.全局變量會自動賦值(整形變量,自動賦值為0;如果是對象,自動賦值為null;String是對象)
4.局部變量不賦值不能通過編譯
如何計算java內存所占大小,參閱:https://www.jianshu.com/p/9d729c9c94c4