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

最近在看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。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值