数据存储在哪里?

Posted Kaneha

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据存储在哪里?相关的知识,希望对你有一定的参考价值。

寄存器 : 最快的存储区,位于处理器中,寄存器会按需求自行分配空间,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);  //此时输出李四而不是王五.

    //看出来区别了吗?
}

  

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

 

以上是关于数据存储在哪里?的主要内容,如果未能解决你的问题,请参考以下文章

代码片段 PHP,预期文件结尾,我错在哪里?

在哪里以及如何使用片段填充我的标签

我在哪里更改此 Python 代码片段以将临时文件保存在 tmp 文件夹中?

在 webview_flutter 中启用捏合和缩放,在哪里添加代码片段 [this.webView.getSettings().setBuiltInZoomControls(true);]

在tablayout片段之间进行通信[重复]

iOS)我应该在哪里复制和粘贴 facebook XML 片段?