变量分类:
• 类变量:独立于方法之外的变量,用 static 修饰。
• 实例变量:独立于方法之外的变量,不过没有 static 修饰。
• 局部变量:类的方法中的变量。
共享内存 和 私有内存
1、共享内存:方法区,堆。
2、私有内存:程序计数器,java虚拟机栈,本地方法栈。
四、变量存放规则:
1、一切对象存放在堆里。
2、类变量,常量 存放在方法区中、
3、局部变量为私有变量存放在java虚拟机栈中。
记住一个原则即可:方法体中的引用变量和基本类型的变量都在栈上,其他都在堆上。
String str = new String("abc"); 创建了几个对象?
答:可以答创建了一个对象,也可以答创建了两个对象,需要分情况讨论。
创建一个对象:当常量池存在时,则直接new一个对象。
创建两个对象:当常量池不存在时,则在常量池创建一个对象,也在堆中创建一个对象。
关于内存地址比较例题
String str1= new String("abc");
String str2= "abc";
String str3= "abc"; System.out.println(str1 == str2) //false
System.out.println(str2 == str3) //true
答: 第一个是false: new 创建新的对象会开辟新的空间,所以地址不一样。 第二个是true:都是从常量池里面获取,"abc" 存在于常量池中。
--------------
final 有什么用?
答: 用于修饰类、属性和方法;
被final修饰的类不可以被继承
被final修饰的方法不可以被重写
被final修饰的变量不可以被改变,
被final修饰不可变的是变量的引用,而不是引用指向的内容,引用指向的内容是可以改变的