您的位置:首页 > 编程语言 > Java开发

Java中数据存储在哪?以及equals和==的区别

2016-03-08 12:25 330 查看
最近在看java编程思想,疯狂补java基础,下面写下自己看书之后的一些细小的知识点的总结。

java中,经常会使用到一些变量,不管是基本数据类型还是引用数据类型,但是我们又会有问题,那么这些变量到底存储在哪里呢?

对于基本数据类型,不论是局部变量还是成员变量都是存储在栈中,

public class Test {
int c =100000;
public static void main(String[] args) {
// TODO Auto-generated method stub
int a = 100000;
Test t = new Test();
if(a==t.c){
System.out.println("true");

}else{
System.out.println("false");
}
}

}
输出的是true


在java编程思想中也有提到,对于基本数据类型,会直接将变量存储在栈中。同时我们也可以通过上面的代码来得出结论。

这里我们首先知道方法中的a变量是存储在栈中,若是成员变量c存储在堆中的话,那么地址也就不一样,会输出false,但是却输出true,说明也是存储在栈中的,同时由于共享性的关系,使得两个变量指向同一个地址。

对于引用数据类型。

深入Java虚拟机中有说:new出来的对象全是存储在堆中。

这里String字符串比较特殊:存储在常量池中,当字符串值相等的时候,这个时候他们实际上也是同一个对象。

比如:

public class MtTest {
public static void main(String[] args) {
String a = "1234";
//  String b  = new String("1234");
String b= "1234";
if(a==b){
System.out.println("同一个对象");
}else{
System.out.println("不是同一个对象");
}
}
}
输出结果是同一个对象


public class MtTest {
public static void main(String[] args) {
String a = “1234”;
String b = new String(“1234”);
// String b= “1234”;
if(a==b){
System.out.println(“同一个对象”);
}else{
System.out.println(“不是同一个对象”);
}
}
}
输出的不是同一个对象


因此,第一种,“1234” 都是指向同一个地址,所以是同一个对象,而第二种,因为通过new了一个新对象,因此不是指向同一个地址,所以,不是同一个对象。

注意:==无论如何都是比较地址,而equals原本也是比较地址,但是通过重写这个方法,可以比较值,很多类都重写了这个方法,比如String。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: