我们学习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. JDK各版本新特性总结

    序言 北风潜入悄无声,未品浓秋已立冬. JDK1.1--1996 JDK1.2--1998 JDK1.3--2000 JDK1.4--2002 JDK5.0--2004 JDK6.0--2006 JD ...

  2. [NOIP提高&洛谷P1024]一元三次方程求解 题解(二分答案)

    [NOIP提高&洛谷P1024]一元三次方程求解 Description 有形如:ax3+bx2+cx+d=0 这样的一个一元三次方程.给出该方程中各项的系数(a,b,c,d 均为实数),并约 ...

  3. C# TreeView 自定义显示checkbox

    本项目需要对TreeView进行定制,要求比较简单,主要要求如下: Winform中TreeView控件默认只支持所有级别的CheckBox显示或者不显示,不能控制制定Level的树节点显示 效果如下 ...

  4. vi 编辑器使用技巧

    1.由命令"vi --version"所显示的内容知vi的全局配置文件 2.显示行号   ,非编辑模式输入 : set nu 3.显示颜色 1)在文件中找到 "synta ...

  5. gradle 构建工具,与Ant Maven关系

    1   基本概念 gradle是一个基于Apache ant 和apache maven概念的项目自动化建构工具.它使用一种基于Groovy的特定领域语言来声明项目设置,而不是传统的xml.当前其支持 ...

  6. AopProxyUtils.getSingletonTarget(Ljava/lang/Object;)Ljava/lang/Object;大坑

    这个问题太坑了,试了好多个版本,都是依赖冲突导致的, https://blog.csdn.net/qq_15003505/article/details/78430595 最后找到这一篇博客解决了,就 ...

  7. Vue 进阶教程之:详解 v-model

    分享 Vue 官网教程上关于 v-model 的讲解不是十分的详细,写这篇文章的目的就是详细的剖析一下, 并介绍 Vue 2.2 v-model改进的地方,然后穿插的再说点 Vue 的小知识. 在 V ...

  8. 七、springcloud之配置中心Config(二)之高可用集群

    方案一:传统作法(不推荐) 服务端负载均衡 将所有的Config Server都指向同一个Git仓库,这样所有的配置内容就通过统一的共享文件系统来维护,而客户端在指定Config Server位置时, ...

  9. Scrapy命令行工具简介

    Windows 10家庭中文版,Python 3.6.4,virtualenv 16.0.0,Scrapy 1.5.0, 在最初使用Scrapy时,使用编辑器或IDE手动编写模块来创建爬虫(Spide ...

  10. 洛谷P3378堆

    传送门啦 #include <iostream> #include <cstdio> #include <cstring> #include <algorit ...