【答疑解惑】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 条评论
登录 后参与评论

相关文章

来自专栏重庆的技术分享区

关于eslint使用规则,和各种报错对应规则。

ESLint 由 JavaScript 红宝书 作者 Nicholas C. Zakas 编写, 2013 年发布第一个版本。 NCZ 的初衷不是重复造一个轮子...

9457
来自专栏Android机动车

转向Kotlin——枚举类和扩展

Kotlin中的枚举类和Java中的枚举类型非常相似,具有类的特性。一般将可枚举的同类型的一组值作为枚举类定义。

732
来自专栏前端知识分享

第40天:字符串操作:截取字符串

1、slice() slice("取字符串的起始位置",[结束位置]);//初始位置一定要有,结束位置可有可无 var txt="abcedf"; txt.sl...

661
来自专栏xingoo, 一个梦想做发明家的程序员

【java开发系列】—— JDOM创建、修改、删除、读取XML文件

有很多中操作XML文件的方法,这里介绍一下JDOM的使用方法和技巧。 JDOM下载地址 创建XML文档   XML文件是一种典型的树形文件,每个文档元素都是...

2009
来自专栏申龙斌的程序人生

零基础学编程006:赋值语句

继续上次的一道练习题: 如何用Python打印这篇看上去很枯燥的《复利数据表》: (1+0.01) ^ 1 = 1.01 (1+0.01) ^ 2 = 1.0...

2705
来自专栏Google Dart

Dart语言指南(二) 顶

Dart是一种面向对象的语言 包含类和基于 mixin 的继承两部分。每个对象是一个类的实例, 并且 Object.是所有类的父类。 基于 mixin 的继承指...

1701
来自专栏潇涧技术专栏

Python Basics

1.使用glob模块可以用通配符的方式搜索某个目录下的特定文件,返回结果是一个list

832
来自专栏待你如初见

Day14

1043
来自专栏行者常至

021.使用反射,编写SpringIOC

就是把每一个bean(实体类)与bean(实体类)之间的关系交给第三方容器进行管理。 而不是传统的在你的对象内部直接控制。

722
来自专栏葡萄城控件技术团队

检测字节流是否是UTF8编码

几天前偶尔看到有人发帖子问“如何自动识别判断url中的中文参数是GB2312还是Utf-8编码” 也拜读了wcwtitxu使用巨牛的正则表达式检测UTF8编码的...

2368

扫码关注云+社区