在函数中定义的一些基本类型的变量和对象的引用变量都是在函数的栈内存中分配。当在一段代码块中定义一个变量时,java就在栈中为这个变量分配内存空间。
比如
void func()
{
Object obj = new Object();//这个obj在函数的栈里。
}
class Test
{
private Object obj = new Object();//这个obj随对应的Test对象分配在堆里
}
堆内存用于存放由new创建的对象和数组。
"=="操作符的作用
1、用于基本数据类型的比较
2、判断引用是否指向堆内存的同一块地址。
equals的作用:
用于判断两个变量是否是对同一个对象的引用,即堆中的内容是否相同,返回值为布尔类型
String作为一个对象来使用
例子一:对象不同,内容相同,"=="返回false,equals返回true
String s1 = new String("java"); String s2 = new String("java"); System.out.println(s1==s2); //false System.out.println(s1.equals(s2)); //true
详解:s1和s2只是两个引用,存放在函数的栈中,就是堆内存中存放对象的地址,new String("java")这两个对象在函数堆内存中分别创建了对象,所以地址值不一样,==返回为false,而equals 则比较两个对象的值,所以返回true。
例子二:同一对象,"=="和equals结果相同
String s1 = new String("java"); String s2 = s1; System.out.println(s1==s2); //true System.out.println(s1.equals(s2)); //true
String作为一个基本类型来使用
如果值不相同,对象就不相同,所以"==" 和equals结果一样
String s1 = "java"; String s2 = "java"; System.out.println(s1==s2); //true System.out.println(s1.equals(s2)); //true