【答疑解惑】Java中基本数据在内存中是如何存储的

Java的基本数据类型共有8种,即int, short, long, byte, float, double, boolean, char(注意,并没有string的基本类型)。

这种类型的定义是通过诸如:

int a = 5; long b = 255L;的形式来定义的。

如int a = 5;这里的a是一个指向int类型的引用,是一个局部变量,指向5这个字面值。这些字面值的数据,由于大小可知,使用范围可知,出于追求速度的原因,就存在于栈中。

另外,栈有一个很重要的特殊性,就是存在栈中的数据可以共享。比如:我们同时定义: int a=5; int b =5; 编译器先处理int a = 5;首先它会在栈中创建一个变量为a的引用,然后查找有没有字面值为5的地址,没找到,就开辟一个存放5这个字面值的地址,然后将a指向5的地址。接着处理int b = 5;在创建完b这个引用变量后,由于在栈中已经有5这个字面值,便将b直接指向5的地址。这样,就出现了a与b同时均指向5的情况。

定义完a与b的值后,再令a = 6;那么,b是等于6,还是等于5。在编译器内部,遇到时,它就会重新搜索栈中是否有6的字面值,如果没有,重新开辟地址存放6的值;如果已经有了,则直接将a指向这个地址,因此a值的改变不会影响到b的值。

原文发布于微信公众号 - 程序员互动联盟(coder_online)

原文发表时间:2015-08-31

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏程序员互动联盟

【Java基础】Java语言中的流程控制

前言: 上一篇文章写了面向对象的基础知识,接下来就开始写真正的代码了。逻辑判断和控制流程是编码中最小的逻辑单元,是整体逻辑的基石,所以每一个写代码的对于这一块...

3415
来自专栏一直在跳坑然后爬坑

Kotlin之“AbstractMutableList”

打印结果分别为 prefix1:2:3:4:5:6postfix prefix1:2:3:truncatedpostfix

772
来自专栏阮一峰的网络日志

Ramda 函数库参考教程

学习函数式编程的过程中,我接触到了 Ramda.js。 我发现,这是一个很重要的库,提供了许多有用的方法,每个 JavaScript 程序员都应该掌握这个工具。...

4216
来自专栏有趣的django

4.python迭代器生成器装饰器

基本概念 1.容器(container) 容器是一种把多个元素组织在一起的数据结构,容器中的元素可以逐个地迭代获取,可以用in, not in关键字判断元素是否...

2838
来自专栏三好码农的三亩自留地

StringBuilder 你不知道的骚操作

在String你还需要知道这些细节中提到过,由于String被设计成immutable,所以才有了StringBuilder和StringBuffer这2个类来...

932
来自专栏debugeeker的专栏

《coredump问题原理探究》Linux x86版6.3节有成员变量的类coredump例子

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/xuzhina/article/detai...

621
来自专栏python3

python3--迭代器,生成器

现在是从结果分析原因,能被for循环的就是"可迭代的",但是如果按常规想,for怎么知道谁是可迭代的呢?

891
来自专栏浪淘沙

java初级笔记----API

一、类Object java.lang.Object 是类层次结构的根类,每个类都使用object作为超类。所有对象(包括数组)都实现这个类...

1214
来自专栏Python小屋

微课系列(三):Python列表中存储的是元素的引用

技术要点:在Python中,变量不直接存储值,而是存储值的引用。同样,在列表、元组、字典、集合等容器类对象中也是存储的元素值的引用。

893
来自专栏老司机的技术博客

人人都能学会的python编程教程10:调用函数

要调用一个函数,需要知道函数的名称和参数,比如求绝对值的函数abs,只有一个参数。

93913

扫码关注云+社区