Java数据类型的基本概念

数据类型在计算机语言里面,是对内存位置的一个抽象表达方式,可以理解为针对内存的一种抽象的表达方式。

开始接触每种语言的时候,都会存在对数据类型的认识,有复杂的,有复杂的,各种数据类型都需要在学习初期去了解。数据类型是语言的抽象原子概念,可以说是语言中最基本的单元定义。

Java语言是一门强类型语言,所以Java对于数据类型的规范会相当严格。在Java里面,本质上将数据类型分为两种:基本数据类型和引用数据类型。

基本数据类型:基本数据类型又称为简单数据类型,是一些不能简化的、内置的数据类型,由编程语言本身定义,它表示了真实的数字、字符和整数。

引用数据类型:Java语言本身不支持C++中的结构(struct)或联合(union)数据类型,它的复合数据类型一般都是通过类或接口进行构造,类提供了捆绑数据和方法的方式,同时可以针对程序外部进行信息隐藏。

事实上,Java语言是一个近乎纯洁的面向对象编程的语言,只是为了编程的方便,才引入了基本数据类型。而为了能够将这些基本数据类型当作对象操作,Java又为每一个基本数据类型都引入了相应的包装类型,这些包装类型则是属于引用类型。

Java中的8个基本数据类型

byte(字节型):Java中最小的数据类型,在内存中占8位(bit),即1个字节,取值范围-128~127,默认值是0。

short(短整型):在内存中占16位,即2个字节,取值范围-32768~32717,默认值是0。

int(整型):用于存储整数,在内存中占32位,即4个字节,取值范围-2147483648~2147483647,默认值是0。

long(长整型):在内存中占64位,即8个字节,取值范围-2^63-2 ~2^63-1,默认值是0L。

float(浮点型):用于存储带有小数点的数字,在内存中占32位,即4个字节,默认值是0。

double(双精度浮点型):用于存储带有小数点的数字,在内存中占64位,即8个字节,默认值是0。

char(字符型):用于存储单个字符,在内存中占16位,即两个字节,取值范围0~65535,默认值是空(非null)。

boolean(布尔类型):用于判断真或假,仅有两个值,即true和false。在内存中占8位,即1个字节,默认值是false。

Java数据类型在内存中的存储

在Java中,每个存放数据的变量都是有类型的,比如说char ch;中ch是字符型的,就会分配到2个字节的内存。不同类型的变量在内存中分配的字节数不同,同时存储方式也是不同的。

所以给变量赋值前,需要先确定变量的类型,确定了变量的类型,即确定了数据需要分配的内存空间的大小,数据在内存中的存储方式。

基本数据类型的存储原理:所有简单数据类型不存在【引用】的概念,基本数据类型都是直接存储在内存中的内存栈上面的,数据本身的值就是存储在栈空间里面,而Java语言里面的8种基本数据就是这种存储模型。

引用类型的存储原理:引用类型继承于Object类(也是引用类型),都是按照Java里面存储对象的内存模型来进行数据存储的,使用Java内存堆和内存栈来进行这种类型的数据存储,简单来讲,【引用】是存储在有序的内存栈上的,而对象本身的值则存储在内存堆上。

区别:基本数据类型和引用类型的区别,主要在于基本数据类型是分配在栈上的,而引用类型是分配在堆上的(需要理解Java中的栈和堆的概念)

Java基本数据类型的取值范围计算

从计算机组成原理的角度可以解释:

byte在计算机中是占8位的,而且byte是有符号整型,用二进制表示时,最高位为符号位,0代表正数,1代表负数。

最大值是127,即2的7次方减1;最小值是-128,即2的7次方前面加个负号。(需要理解二进制)

正数在计算机中是以原码形式存在的;而负数在计算机中是以补码的形式存在的,就是负数的绝对值的原码转为二进制再按位取反后再加1。

以10和-10为例来介绍:

10的原码是00001010,即2^1+2^3,它在计算机中的存储就是00001010。

-10按照前面说的,需要先算出其绝对值是10,转为二进制,就是00001010,然后按位取反,得到11110101,然后再加1,即加上2的0次方,得到11110110,这个结果就是-10的补码,即在计算机中11110110代表的就是-10。

java的数据类型:基本数据类型和引用数据类型的更多相关文章

  1. [javase学习笔记]-6.6 基本数据类型參数与引用数据类型參数的传递过程

    这一节基本数据类型參数和引用数据类型參数的传递过程. 数据类型參数和引用參数我们在前面章节中都已涉及到了,那么我们来看看以下的两段代码: //基本数据类型參数传递 class Demo { publi ...

  2. Java基础之路(一)下--引用数据类型之数组

    上次我们说了java的基础数据类型,今天我们就来说一下引用数据类型中的数组. 什么是数组 数组:存储在一个连续的内存块中的相同数据类型(引用数据类型)的元素集合. 数组中的每一个数据称之为数组元素,数 ...

  3. 200-Java语言基础-Java编程入门-006 | Java数组定义及使用(引用数据类型)

    一.数组概述和定义格式说明 为什么要有数组(容器): 为了存储同种数据类型的多个值 数组概念: 数组是存储同一种数据类型多个元素的集合.也可以看成是一个容器. 数组既可以存储基本数据类型,也可以存储引 ...

  4. js原始数据类型有哪些,引用数据类型有哪些

    js的数据类型划分方式为 原始数据类型和 引用数据类型 栈: 原始数据类型(Undefined,Null,Boolean,Number.String) 堆: 引用数据类型(对象.数组.函数) 两种类型 ...

  5. Java 基础 引用数据类型 ArrayList集合

    引用数据类型(类) 分类 提到引用数据类型(类),其实我们对它并不陌生,如使用过的Scanner类.Random类. 我们可以把类的类型为两种: 第一种,Java为我们提供好的类,如Scanner类, ...

  6. java中的基本数据类型和引用数据类型

    java中基本数据类型有8种:byte,short,int,long,char,float,double,boolean 整型有四种:byte short,int,long byte:   1字节   ...

  7. Java容器-引用数据类型排序+TreeSet、TreeMap底层实现

    目录 1.冒泡排序的实现 2.比较接口(普通数据类型.引用数据类型) 普通数据类型:冒泡排序 引用数据类型:包装类(Integer.String.Character.Date) 自定义类型:实体类:i ...

  8. java 方法及引用数据类型

    一.方法 在java中,方法就是用来完成解决某件事情或实现某个功能的办法. 1.语法格式: 修饰符 返回值类型 方法名(参数类型 参数名1,参数类型 参数名2,......){ 执行语句 ……… re ...

  9. Java入门(6)——集合、基本数据类型和引用数据类型的相互转换

    集合: 1.HashMap ---->  类 概述: 通过key可以找到value, key就是键, values就是值. 俗称键值对. 特点: 无序的    值可以重复  键不可以重复的  如 ...

  10. 【重走Android之路】【Java面向对象基础(一)】数据类型与运算符

    [重走Android之路][基础篇(一)][Java面向对象基础]数据类型与运算符   1.数据类型介绍 在Java中,数据类型分为两种:基本数据类型和引用类型. 基本数据类型共8种,见下表: 基本数 ...

随机推荐

  1. nginx stream 日志设置(Version 1.9.0 +)

    nginx自1.9.0开始提供tcp/udp的反向代理功能,直到1.11.4才开始提供session日志功能. 启用stream日志配置文件 主配置文件/etc/nginx/nginx.conf增加内 ...

  2. 新建SpringBoot项目运行页面报错Whitelabel Error Page This application has no explicit mapping for /error, so yo

    新建SpringBoot项目运行页面报错Whitelabel Error Page This application has no explicit mapping for /error, so yo ...

  3. ES5-ES6-ES7_解构赋值

    解构赋值的概念 ES6允许按照一定模式,从数组和对象中提取值,对变量进行赋值,这被称为解构(Destructuring) 传统对变量赋值的方式,以前,为变量赋值,只能直接指定值. var a = 1; ...

  4. centos6.5下配置django+uwsgi+nginx

    https://blog.csdn.net/huanbia/article/details/54630180

  5. 解决y7000笔记本ubuntu下wifi无法连接问题

    查看wifi与蓝牙硬件开关,发现ideapad的硬件模块都是关闭的 rfkill list all 打开终端 输入 sudo gedit /etc/rc.local 写入以下内容 进行保存 #!/bi ...

  6. [转]Oracle 清除incident和trace -- ADRCI用法

    在oracle11g中,dump file的目录已经有所改变,bdump和udump整合到trace中,cdump独立出一个. E:\ora11g\app\Administrator\diag\rdb ...

  7. 【转】MFC内嵌cef3浏览器内核

    一.cef3内核的下载 可以从http://opensource.spotify.com/cefbuilds/index.html下载,注意:很多版本编译都可以通过 但是运行的时候会崩溃,以cef_b ...

  8. tomcat 启动慢问题

    主要原因: 生成随机数的时候卡住了,导致tomcat启动不了. 是否有足够的熵来用于产生随机数,可以通过如下命令来查看 [root@oldboy tools]# cat /proc/sys/kerne ...

  9. Android自动化测试学习路线

    最近在整理Android自动化测试的相关资料,大体上把一些知识点梳理了,这里做一个简单的分享! Android里面测试相关的工具和框架太多了.你应该从以下几个方面入手. 编程语言的选择 如果你要学习的 ...

  10. 1、c++对c语言的扩展

    1.类型增强 检查更加严格 比如,把一个 const 类型的指针赋给非 const 类型的指针.c 语言中可以通的过,但是在 c++中则编不过去 ; int b = a; const int *pa ...