数据存储在哪里?

寄存器 : 最快的存储区,位于处理器中,寄存器会按需求自行分配空间,java不能控制寄存器,所以在程序中感觉不到它的存在

 

栈(stack) : 位于RAM(内存)中,速度仅次于寄存器,存储对象的引用(地址),指向堆中的对象. 基本类型直接存储值在栈中

 

堆(heap) : 也位于RAM中,比栈略慢,存储对象

 

常量存储 : 直接存放在程序代码内部

 

非RAM存储 : 比如流对象和持久化对象.存储在磁盘中.

 

Java是值传递还是引用传递?

给方法传参时,可以看作是用等号("=")赋值.

String name = "张三";
obj.setName(name);//可以看作是str=name="张三",此时str和name都指向"张三";
public void setName(String str) {
    str = "李四";  //等于是给str重新赋值,不在指向"张三"了,转而指向李四,所以name指向"张三"并没有受到影响
    System.out.println(str == name);  //false
}  

但是有一种情况下操作方法内的局部变量会使实参受到影响受到影响,如下

Person person = new Pserson("张三");
obj.setPserson(person);  //someone=person=Person对象
public void setPerson(Person someone){
    someone.setName("李四");
    System.out.println(person.name);  //此时输出李四而不是张三.
    
    someone = new Person("王五");
    System.out.println(person.name);  //此时输出李四而不是王五.

    //看出来区别了吗?
}

  

上面的例子可以看出来,调用方法时,实参传入的是对象的引用,此时两个变量都指向同一个对象,调用对象的方法是能够影响到方法外边的成员变量的,如果重新赋值就不行了.

 

转载于:https://www.cnblogs.com/jinyu59/p/10739337.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值