应用数据类型的初步分析

引用数据:
引用 不同的表面,相同的结果。
new:出现new一定会开辟一个新的堆内存!;
如果声明并实例化两个对象,会出现两个堆内存!
class Book{//定义一个类
String title;//书的名字
double price;//书的价格
public void getInfo(){//此对象将由方法调用
    System.out.println.("图书名称"+title+"图书价格"+price)
}
}
public class TestDemo{
    public static void main(String[] args){
        Book booka = new Book();//声明并实例化一个对象
        booka.title="Java开发";//操作属性内容,如果不设置值那么会输出默认值;
        booka.price="89.5";//操作属性内容
        Book bookb =new Book();
        bookb.title="Jsp开发";
        bookb.price="69.5";
        bookb.getInto();
        booka.getInto();//代码执行后,这两个对象完全不冲突。
}
}
上面代码:new出了两个栈内存,并且分别保存了从类中获取的属性,都具有其默认值。

class Book{//定义一个类
String title;//书的名字
double price;//书的价格
public void getInfo(){//此对象将由方法调用
    System.out.println.("图书名称"+title+"图书价格"+price)
}
}
public class TestDemo{
    public static void main(String[] args){
        Book booka = new Book();//声明并实例化一个对象
        Book bookb =null;//声明对象
        booka.title="Java开发";//操作属性内容,如果不设置值那么会输出默认值;
        booka.price="89.5";//操作属性内容
        bookb = booka;//引用传递
        bookb.price="69.5";
        booka.getInto();//输出的价格为69.5
}
}
严格来说booka和bookb保存的是地址信息,所以以上的引用过程相当于把booka的地址赋给了bookb。
可以理解为复制了一把钥匙,原来bookb的钥匙换掉了换成了和booka一样的钥匙。但是钥匙名还是叫做bookb和booka。此时两个对象指向的是同一个堆内存空间,此时任何一个对象改变了堆内存空间,那么都会影响到其他对象.
在引用的操作过程中,一个堆内存可以同时被多个栈内存所指向,但是一块栈内存只能保存一个堆内存的地址!

class Book{//定义一个类
String title;//书的名字
double price;//书的价格
public void getInfo(){//此对象将由方法调用
    System.out.println.("图书名称"+title+"图书价格"+price)
}
}
public class TestDemo{
    public static void main(String[] args){
        Book booka = new Book();//声明并实例化一个对象
        Book bookb =new Book();
        booka.title="Java开发";//操作属性内容,如果不设置值那么会输出默认值;
        booka.price="89.5";//操作属性内
        bookb.title="Jsp开发";
        bookb.price="69.5";
        bookb = booka;//引用关系
        bookb.price=79.8;   
        booka.getInto();//结果输出  java开发,79.8
}
}

new开辟了两个堆内存,bookb=booka;一个栈只能指向一个堆,所以bookb先和原来地址断开,再指向新的连接。那么原来bookb所对应的地址就成为了不被使用的,即为垃圾。bookb.price=79.8;此时bookb指向的是booka也指向的空间,所以在改变bookb所对应的堆内存时其他对象指向此堆内存也随之改变。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值