我们学习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. SVN搭建和使用

    原文出处: http://www.cnblogs.com/tugenhua0707/p/3969558.html SVN简介: 为什么要使用SVN? 程序员在编写程序的过程中,每个程序员都会生成很多不 ...

  2. [转载]Node入门 » 一本全面的Node.js教程

    http://www.nodebeginner.org/index-zh-cn.html 作者: Manuel Kiessling 翻译: goddyzhao & GrayZhang & ...

  3. CSS中的选择器(笔记)

    1.通配符选择器(*):通配符选择器是用来选择所有元素,也可以选择某个元素下的所有元素.所有浏览器都支持通配符选择器. ;;} .dome *{padding: 2px;} 2.元素选择器(Ele): ...

  4. [csp-201403-3]命令行选项

    #include<bits/stdc++.h> //#include <sstream> // if want to use stringstream using namesp ...

  5. promise顺序执行,返回结果存放在数组

    遇到面试的一个编程题:三个返回promise对象的异步操作,让你写一个函数可以将这些操作顺序执行,并返回一个数组包含三个异步对象的结果 异步对象: // 异步函数a var a = function ...

  6. mysql 数据范围总结

    MEDIUMINT 带符号的范围是-8388608到8388607,无符号的范围是0到16777215,使用3个字节. 一般情况下推荐使用 unsigned (无符号,即只接受正整数)

  7. App测试需注意

    APP测试的时候,建议让开发打好包APK和IPA安装包,测试人员自己安装应用,进行测试.在测试过程中需要注意的测试点如下: 1安装和卸载 ●应用是否可以在iOS不同系统版本或Android不同系统版本 ...

  8. java所搜引擎slor学习笔记(一)

    java搜索引擎有很多,比较熟悉的就是slor和lucene. luncene: 概念:全文检索是计算机程序通过扫描文章中的每一个词,对每一个词建立一个索引,指明该词在文章中出现的次数和位置.当用户查 ...

  9. linux文件管理 -> 系统文件属性

    -rw-------. 1 root root 4434 May 30 13:58 ks.cfg -rw-------. ①:文件类型与权限 ②:硬链接次数 root ③:所属用户 root ④:所属 ...

  10. 关于一些问题的解决办法[记录]TF400017

    这个问题是今天在改东西的时候,突然断电导致的,google了很久之后,终于找到了办法 方法: 就是删除下面这个文件 -========================================= ...