我们学习Java就是为了编写程序完成功能,而什么是程序呢?程序 = 数据结构 + 算法。 分开看,数据结构指的是数据与数据之间的关系,那我们先来了解一下Java中的数据都是怎么表示的呢 ?也就是说数据都有哪些不同的类型呢 ?

顺带说一下变量的概念,在Java中变量可以理解为是一个遥控器,而变量所代表的值就是电视机,我们是通过操作变量(遥控器)来操作不同的值(电视机)。而遥控器也有不同的型号的呀,大的小的迷你的等等,体现在变量上就是变量可以有不同的类型。不同类型的变量,可以在内存中分配不同的空间。

那就来看一下Java中都有哪些数据类型,总体上分为基本数据类型和引用数据类型 。

基本数据类型:(整形 浮点型 字符型 布尔型) 
整形:表示整数的类型有以下四种 
byte :一个子节共占 8 位 ,计算机中数字以补码的形式存储 ,所以 1 byte的数值范围是 -128 ~ 127 之间,默认值为 0 。 
short : 两个字节共 16 位,数值范围 -2^15 ~ 2^15 - 1 ,默认值为 0。 
int :四个字节共 32 位,byte short int 在进行计算时,会首先转化为 int 再进行计算 ,默认值依然是 0 。 
long :八个字节共占 64 位,默认值为 0L 。 
浮点型 :带有小数的数 。 
float :单精度小数,占4个字节,小数点后四舍五入保留 7 位小数。默认值是 0.0 
double :双精度小数,占 8 个字节,小数点后四舍五入保留 16 位小数。默认值是 0.0 。另外,在小数的运算中,默认的 double 类型 ,就像你整形默认是 int 类型那样。 
boolean :注意了,boolean类型只占一位也就是 1 bit, 1/8 字节,所以只能表示两种状态,0 或 1 ,也就是 false 和 true 。而默认值是 0 ,也就是 false 。 
char :char类型是一个单一的 16 位 Unicode 字符,char 数据类型可以储存任何字符,注意是字符,而字符串是String 类型,是一个引用类型。

下面来几个题目感受一下。 
3 * 0.1 == 0.3 结果是什么 ?true 还是 false ? 
答案是 false 。 因为 0.1 是 double 类型,所以存在精度丢失的情况,3 * 0.1 的结果也是 double 类型,故结果会比 0.3 要大。

float f = 3.4;是否正确? 
错误,因为小数的默认的类型是 double ,若非要定义为 float ,则可以这么写 float f = 3.4f ;

short s = 1; s = s + 1; 和 short s = 1; s += 1; 的区别 ?

前者报错,后者 s = 2 ; 因为 short 类型的数据在运算的时候会先转化为 int 类型,故将 s + 1 为 int 类型的 2 赋给 short 类型的 s ,会发生精度丢失 。而 += 这个运算符在内部已经将结果进行强制类型转换。类似于这样 short s = (short) s + 1 ;

说实话 ,就上面这些最基础的东西 ,我也是刚刚搞明白 。真是整理出奇迹啊 !

再简单说一下引用数据类型 ,引用数据类型包括类,接口和数组 。这些该概念在以后会慢慢梳理 。

那我就来简单说一下基本数据类型和引用数据类型的区别 。给大家一个感性的认识 。程序中用到的数据肯定都是要存储在内存中的,不然 CPU怎么给你计算呢? 前面也说了变量就像是遥控器操作电视机一样那样操作我们的数据 。我们数据在内存中会分为栈内存和堆内存,而变量就存放在栈中,栈的内存占比比较小,大概 10 % - 20 %左右。而基本数据类型的数据就放在栈中,引用类型的数据放在堆中,而变量或说实例放在栈中。

下面我就来定义一个大胆的场景,我们的变量(实例)是一个遥控器,而数据就是电视机,电视机旁边有一个遥控器盒专门放遥控器就相当于基本数据类型的在栈中的情况,一个区域分为数据域和指针域。而引用类型的变量就相当于我们手握遥控器来操作客厅的遥控器,手中的空间就是栈,而客厅就是堆。我们是通过栈中的引用来操作堆中的数据。不知道这么说大家有没有一个感性的认识,为什么要这么分呢 ?在栈中操作数据肯定要比堆中处理的快呀,所以为了加快速度,就把那些常用的类型划为了基本数据类型。

Java 中的数据类型的更多相关文章

  1. Java中的数据类型及相互转换方法

    本文主要讲解两个部分: 一.Java中的数据类型有哪些? 二.数字类型和字符串类型相互转换的方法? 一.Java中的数据类型有哪些: Java中的数据类型有:基本数据类型和引用数据类型: 基本数据类型 ...

  2. Java中基本数据类型和包装类

    参考:深入剖析Java中的装箱和拆箱; Java中基本数据类型和包装类互转中 缓冲机制的使用; java学习笔记:装箱和拆箱,包装器和缓冲池 Java 各 类型数据在内存中分配情况详解 一 java内 ...

  3. java中的数据类型,运算符,字符串,输入输出,控制流,大数值,数组; 《java核心技术卷i》 第三章:java基本程序结构;

    <java核心技术卷i> 第三章:java基本程序结构: 每次看书,去总结的时候,总会发现一些新的东西,这次对于java的数组有了更深的了解: java中的数据类型,运算符,字符串,输入输 ...

  4. 讲说问题:|和||的区别以及&和&&的区别。2、Java中的数据类型分几类?基本数据类型有哪些?

    |和||的区别以及&和&&的区别. |或 为或运算 判断为逻辑或 || 为短路或 只有逻辑判断 当左侧为真不再继续判断 &与 为与运算 判断为逻辑与 && ...

  5. Java中关于数据类型的一些问题

    Java中关于数据类型的一些问题 总结一下最近笔试遇到的一些关于Java中数据类型的一些问题. 虽然比较基础,但在实际做题却很容易出错的点,而且往往这些题出错了会给面试官很不好的感觉:你的基础不好. ...

  6. Java中基本数据类型byte的溢出问题

    Java中基本数据类型byte的溢出问题 问题源于:https://www.cnblogs.com/HuoHua2020/p/12326631.html 定义两个byte类型的数据,将其之和赋值给一个 ...

  7. 010 01 Android 零基础入门 01 Java基础语法 02 Java常量与变量 04 变量的三个元素的详细介绍之二——变量类型——即Java中的数据类型

    010 01 Android 零基础入门 01 Java基础语法 02 Java常量与变量 04 变量的三个元素的详细介绍之二--变量类型--即Java中的数据类型 Java中变量的三要素 变量名 变 ...

  8. 零基础学习java------day2------关键字、标志符、常量、进制键的转换、java中的数据类型、强制类型转换的格式

    今日内容要求: 1. 了解关键字的概念及特点,了解保留字 2. 熟练掌握标识符的含义,特点,可使用字符及注意事项 3. 了解常量的概念,进制,进制之间相互转换,了解有符号标识法的运算方式 4. 掌握变 ...

  9. Java中基本数据类型的对比记忆

    Java中八种基本类型数据情况: 数据类型 所占字节数 所占位数(二进制位数) 可表示范围 默认值 包装类 备注 byte(字节) 1 8 -128 - 127  0  Byte   short(短整 ...

  10. java中的数据类型

    通常情况下,为了方便物品的存储,我们会规定每个盒子可以存放的物品种类,就好比在"放臭袜子的盒子"里我们是不会放"面包"的!同理,变量的存储也讲究"分门 ...

随机推荐

  1. 深入浅出JavaScript之跨域总结

    什么是跨域 1.document.domain+iframe的设置 2.动态创建script 3.利用iframe和location.hash 4.window.name实现的跨域数据传输 5.使用H ...

  2. log4net记录系统错误日志到文本文件用法详解

    log4net是一个完全免费开源的插件,可以去官网下载源码. 一般系统操作日志不会用log4net,自己写代码存入数据库更方便合理,但是系统部署后运行在客户环境,难免会发生系统bug.崩溃.断网等无法 ...

  3. 关于在函数中使用Array.prototype.slice.call而不是直接用slice

    arguments是每个函数在运行的时候自动获得的一个近似数组的对象(除了length外没有其他属性),这个arguments对象其实并不是Array,所以没有slice方法. Array.proto ...

  4. jQuery入门——(二)

    0.基本知识 $与jQuery等价,$.fun代表jQuery的全局方法. jQuery必须首先导入JQuery库, jQuery的事件都不带on,例如 $("#btn").cli ...

  5. HDU 2825 Wireless Password

    题目链接:HDU-2825 题意:给出m个单词,要构造出满足包含其中大于等于k个单词的字符串,字符只包括小写字母,问长度为n的这样的串有多少个. 思路:令dp[i][j][k]表示当前已经构造了i个字 ...

  6. shell用户管理->

    用户的添加与删除练习 -> 脚本1(if then) 思路:1.条件测试, 脚本使用案例, 创建用户[交互式创建] 1.怎么交互式 read -p 2.接收到对应字符串怎么创建用户 userad ...

  7. Gradle教程链接

    Gradle教程:https://www.yiibai.com/gradle/ https://www.cnblogs.com/wxishang1991/p/5532006.html

  8. Owin WebApi版本控制

    public class WebApiControllerSelector : IHttpControllerSelector { private const string NamespaceKey ...

  9. caffe+win7+vs2013 仅CPU环境安装

    笔者对深度学习一直充满着好奇与兴趣,之前学校都是研究图像处理的特征点方式,机器学习使用也不多,别提深度学习了. 在看了李宏毅大佬的PPT后,有了初步的认识,虽然是渣渣电脑,也想自己跑几个深度模型. 说 ...

  10. 云计算IaaS浅谈

    (本篇文章仅仅是整理文档资料时,发现的一篇课程报告,感觉还挺有参考意义的) 最近几年云计算一直是IT业的热点,一股炽热的云计算浪潮席卷了世界,全世界都在讲云计算,都在搞云计算.虽然最初是由谷歌公司提出 ...