Java基础 - 数据类型和运算符
Java 语言支持的类型分为两类:
基本数据类型(Primitive Type)和引用类型(Reference Type)。
基本数据类型
数值类型
整数类型
byte
一个 byte 类型在内存中占 8 位(1字节)范围-128(-2^7) ~ 127(2^7 -1)
short
一个 short 类型在内存中占 16 位(2字节)范围-32768(-2^15) ~ 32767(2^15-1)
int
一个 int 类型在内存占 32 位(4字节)范围-2147483648(-2^31) ~ 2147483647(2^31-1)
long
一个 long 类型在内存中占 64 位(8 字节)范围-2^63 ~ 2^63-1
如果直接将一个较小的整数值(在
byte或者short类型的范围内)赋给一个byte或者short的变量,系统会自动把这个整数值当成byte或者short类型来处理.
如果使用一个巨大的整数值(超出 int 类型的范围)时,Java 不会自动把这个整数值当成 long 类型来处理。如果希望系统把一个整数值当成 long 类型来处理,应在这个整数值后增加l或者L做后缀。
浮点类型
Java 的浮点类型有固定的表数范围和字段长度,字段长度和表数范围与机器无关,Java 的浮点类型遵循 IEEE 标准,采用二进制的科学计数法来表示。
float
一个 float 类型在内存中占 4 字节,32 位,第 1 位是符号位,接下来的 8 位表示指数,在接下来的 23 位表示位数。
double
一个 double 类型在内存中占 8 字节,64 位,第 1 位表示符号位,接下来的 11 位表示指数,在接下来的 52 位表示尾数。
因为 Java 浮点数是用二进制的科学计数法来表示浮点数,因此可能不能精确表示一个浮点数。例如把
5.12345f赋值给一个float类型的变量,接着输出这个变量时看到这个变量的值已经发生了改变。 如果需要一个精确的浮点数,可以使用BigDecimal类。
浮点类型默认的是double如果希望Java把一个浮点类型值当成float来处理,应当在这个浮点类型值后面紧跟一个f或者F。
Java 还提供了三个特殊的浮点数值:正无穷大,负无穷大和非数,用于表示溢出或者出错。正浮点数除以 0(Java会自动把和浮点数进行运算的整数 0 当成浮点数 0.0 处理)得到正无穷大(Double/Float 类中的 POSITIVE_INFINITY).使用一个负浮点数除以 0 得到负无穷大(Double/Float 类中的 NEGATIVE_INFINITY)
表示。0.0/0.0 将得到一个非数 NaN.
所有的正无穷大以及负无穷大都相等,所有的非数都不相等。
100_000_000_000数值中的_方便阅读。无实际含义。

字符型
char
字符型有三种表示形式
- 直接通过单个字符来指定字符型值,例如
'A'、'9'和'0'等. - 通过转移字符标识特殊字符型值,例如
'\n'、'\t' - 直接使用
Unicode值来表示字符型值,格式是'\uXXXX',其中XXXX代表 一个十六进制的整数。

字符类型也可以使用十六进制编码方式来表示,范围是'\u0000'~'\uFFFF',一共可以表示 65535 个字符,其中前 256 个('\u0000'~'\u00FF')字符和 ASCII 码中的字符完全重合。
计算机底层保存字符时,实际上保存的是该字符对应的编号,因此 char 类型的值可以直接作为整形使用,它相当于一个 16 位的无符号整数,表数范围是 0~65535.
如果把 0~65535 范围内的一个 int 整数赋给 char 类型变量,系统自动会把这个 int 整数当成 char 类型来处理
布尔类型
boolean
用于表示逻辑上的真或假, boolean类型的数值只能是 true 或者 false, 不能用 0 或者非0 来表示,其他基本数据类型也不能转换成 boolean 类型。
Java 规范没有强制指定 boolean 类型的变量所占用的内存空间。由于大部分计算机在内存分配时允许的最小内存单元是字节(8 位),因此 bit 大部分时候实际占用 8 位。
Java虚拟机规范一书提到 :
- 在Java虚拟机中没有任何供 boolean值专用的字节码指令,Java语言表达式所操作的
boolean值,在编译之后都使用Java虚拟机中的int数据类型来代替。- Java虚拟机直接支持 boolean类型的数组,虚拟机的 navarra指令参见第6章的newarray小节可以创建这种数组。boolean类型数组的访问与修改共用byte类型数组的baload和 bastore指令。
因为在虚拟机规范中说了,boolean值在编译之后都使用Java虚拟机中的int数据类型来代替,而int是4个字节,那么boolean值就是4个字节。- boolean类型数组的访问与修改共用byte类型数组的baload和 bastore指令,因为两者共用,只有两者字节一样才能通用呀,所以byte数组中一个byte是1个字节,那么boolean数组中boolean是1个字节。
总结:boolean在数组情况下为1个字节,单个boolean为4个字节。
基本数据类型的转换
Java 所有的数值类型可以相互转换,如果系统支持把某种基本类型的值直接赋给另一种基本类型的变量,则这种方式被称为自动类型转换.当把一个表述范围小的数值或者变量直接赋给另一个表数范围大的变量时,系统可以进行自动类型转换.否则就需要强制转换.
自动类型转换
表数范围小的数值赋给表数范围的变量.
Java 支持自动类型转换图:

除了基本类型的自动转换外,把任何基本类型的值和字符串进行连接运算时,基本类型的值将自动转为字符串类型(ps:将基本类型转化为字符串类型时,可以把基本类型的值与空字符串相加).
强制类型转换
如果想把上图箭头右边的数据类型转换为左边的类型,则必须进行强制类型转换.强转的格式为(TargetType)value强制类型转换的运算符是圆括号.
需要注意强制类型转换会造成数据溢出,从而导致数据丢失.
表达式类型的自动提升
当一个算术表达式中包含多个基本类型的值时, 整个算术表达式的数据类型将发生自动提升.
Java 自动提升规则:
- 所有的 byte 类型,short 类型和 char 类型将被提升到 int 类型.
- 整个算术表达式的数据类型自动提升到与表达式中最高等级操作同样的类型.操作数的等级如上如所示,箭头右边的等级高于箭头左边类型的等级.
引用数据类型
类
接口
数组
运算符
算术运算符
+: 加法运算符(还可以作为字符串的连接运算符)-: 减法运算符*: 乘法运算符/: 除法运算符
如果除法运算的两个操作数都是整数类型,则计算结果也是整数,就是将自然除法的结果截取取整。如果除法运算两个操作数都是整数类型,则除数不可以是 0,否则将引发除以 0 异常。如果一个或两个操作数是浮点数,则计算结果也是浮点数,这个结果就是自然除法的结果,而且此时允许除数是 0 或者 0.0,得到的结果是正无穷大挥着负无穷大。%: 求余运算符++: 自加。- 自加是单目运算符,只能操作一个数。
- 自加运算符只能操作单个数值型(整形、浮点型)变量,不能操作常量或表达式。
- 如果 ++ 放在左边,则先把操作数加 1,然后才把操作数放入表达式中运算。如果 ++ 放在右边,则先把操作数放入表达式中运算,然后才把操作数加 1
--: 自减。单目运算符。与++类似,只是将操作数 -1
位运算符
&: 按位与。当两位同时为 1 时才返回 1.|: 按位或。只要有一位为 1 即可返回 1。~: 按位非。单目运算符,将操作数的每个位(包括符号位)全部取反。^: 按位异或。当两位相同时返回0,不同时返回 1。<<: 左移运算符。>>: 右移运算符.>>>: 无符号右移运算符.

逻辑运算符
&&: 与,前后两个操作数必须都是true才返回true,否则饭后false.&: 不短路与,与&&作用相同,但不会短路.||:或,只要两个操作数一个为true,则返回true,否则返回false|: 不短路或, 作用与||相同,但不会短路.!: 非. 取反^: 异或. 当两个操作数不同时返回true,相同时返回false
三目运算符
?:三目运算符只有一个,语法格式为(expression) ? if-true-statement : if-false-statement
注意:
自加和自减只能用于惭怍变量,不能用于操作数值直接量、常量或表达式。
赋值运算符
=
扩展后的赋值运算符
+=: 对于x+=y,即对应于x = x + y-=: 对于x-=y,即对应于x = x - y*=: 对于x*=y,即对应于x = x * y/=: 对于x/=y,即对应于x = x / y%=: 对于x%=y,即对应于x = x % y|=: 对于x|=y,即对应于x = x | y^=: 对于x^=y,即对应于x = x ^ y<<=: 对于x<<=y,即对应于x = x << y>>=: 对于x>>=y,即对应于x = x >> y>>>=: 对于x>>>=y,即对应于x = x >>> y
比较运算符
>: 大于,只支持左右两边操作数是数值类型.>=: 大于等于,只支持左右两边操作数是数值类型.<: 小于,只支持左右两边操作数是数值类型.<=: 小于等于,只支持左右两边操作数是数值类型.==: 等于,如果比较的两个操作数都是数值类型,即使两个操作数的类型不同,只要他们值相等,也返回true. 如果两个操作数都是引用类型,那么比较的是两个操作数的引用地址.!=: 不等于.数据类型比较,无关类型,只进行值比较.引用类型比较对象的引用地址.
运算符的优先级

- 不要把一个表达式写的过于复杂,如果一个表达式复杂,则应该拆成几步来执行
- 不要过多的依赖运算符的优先级来控制表达式的执行顺序,尽量用
()来控制
Java基础 - 数据类型和运算符的更多相关文章
- JAVA基础--数据类型和运算符总结
一,JAVA的数据类型 逻辑型----boolean 只允许取值true和false 字符型----char java采用unicode编码(utf16),每个字符占用两个字节 整数型----byte ...
- Java 基础 变量和运算符
Java基础语法 第1章 变量 1.1 变量概述 1.2 计算机存储单元 1.3 基本类型之4类8种 1.4 常量与类型 1.5 定义变量(创建变量) 1.6 变量使用的注意事项 1.7 数据类型 ...
- 对Java的数据类型和运算符的理解
我知道千里之行始于足下,包含着对编程的兴趣,希望能够在这个平台上记录下我学习过程中的点点滴滴! Java的基本构造 标识符和关键字 标识符规则 标识符就是用于给程序中变量,类.方法命名的符号 1.标识 ...
- java基本数据类型和运算符
一.基本数据类型 种类: 内置数据类型 引用数据类型 1.内置数据类型 一共有八种基本类型,六个数字类型(四个整数类型,两个浮点型),一个布尔型,一个字符类型. (1)byte: byte数据类型是8 ...
- Java 第二章 变量、数据类型和运算符
第二章 变量.数据类型和运算符 什么是变量: 变量代表一块内存区域,变量类型不一样,这一块内存的大小也不一样. #在编程语言里面,你可以通过定义变量,向内存里添加数据或者修改内存已有的数据. ...
- Java中的变量,数据类型和运算符
变量,数据类型和运算符 1.变量是一个数据存储空间的表示,它是储存数据的基本单元. 如何理解这句话,下面用一个表格可以形象的表达: 变量与房间之间的对应关系 房间名称 变量名 房间类型 变量类型 入住 ...
- Java1变量数据类型和运算符
day02_变量数据类型和运算符 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 public class jh_01_数据类型说明 { public ...
- IOS开发新手教程(一)-数据类型和运算符
OC语法入门(一) 数据类型和运算符 1.1凝视 凝视和其它语言一样,同意单行 ,多行凝视,一份规范的代码里面须要有一些正式的凝视,例如以下凝视: /* 这是多行 凝视 */ //这是多行凝视 OC语 ...
- PostgreSQL自学笔记:5 数据类型和运算符
5 数据类型和运算符 5.1 PostgreSQL 数据类型介绍 5.1.1 整数类型 整型类型 字节 取值范围 smallint 2字节 -2^15 ~ 2^15 int integer 4字节 - ...
随机推荐
- DocumentFragment的相关用法
额,今天看了vue1.0关于模板渲染的知识,认识了DocumentFragment这个东西,它相当于一个节点容器,我们对他使用appendChild时,只有它的子节点会被插入进去,它本身不会插入进去, ...
- Navicat导入导出数据表
当我们对mysql数据库进行了误操作,造成某个数据表中的部分数据丢失时,肯定就要利用备份的数据库,对丢失部分的数据进行导出.导入操作了.Navicat工具正好给我们提供了一个数据表的导入导出功能. 1 ...
- phaser2->3:来个打地鼠试水
本文中phaser具体版本 phaser2:2.8.1 phaser3:3.17.0 一.实现效果二.实现细节三.项目总结四.参考文档 一.实现效果 源码地址(phaser2&phaser3) ...
- HTC新机A9足以取代iPhone 你相信吗?
你相信吗?" title="HTC新机A9足以取代iPhone 你相信吗?"> 自信和嘴硬之间,往往就是成功与失败的分水岭.乔老爷子当年推出iPhone.iPad等 ...
- 服务治理与RPC · 跬步
以前写过Django中使用zerorpc的方法,但是由于我们的Django是运行在gevent下,而zeromq需要启动一个后台进程处理消息,与gevent使用的greenlet携程是冲突的. 在Ja ...
- 烘焙ID贴图
ID贴图(ID Map)的作用主要就是用来区分同一个模型中不同的区块,具体的用法查看此文.下面介绍几种不同的方式来烘焙ID贴图,用到的工具分别是Blender和Substance Painter. 在 ...
- 选题在线提交系统(html+JS+php)
前言: 作为学习委员还是有挺多的事情要忙的,比如经常统计同学们的课设题目选择结果.如果老师的要求少一点,我还可以轻松一点.但是当老师对选题有种种限制的时候,自己就估计不会那么好办了.这 ...
- css3动画属性有哪些
transition : 平衡过渡 transition是一种css里的一种过渡效果,完成过渡需要多少秒 .延迟几秒开始 ,过渡的速度(一般有 "linear 匀速" 和“e ...
- 网络地址转换NAT与端口地址转换PAT
网络地址转换NAT与端口地址转换PAT 一.网络地址转换 NAT (Network Address Translation) 1.1.网络地址转换简介 需要在专用网(内网)连接到因特网的路由器上安装 ...
- iMX287A开发环境搭建
目录 1.开发套件简介 2.说明: 3.主机搭建交叉编译环境 4.编译第一个ARM Linux程序--Hello World 5.开发板运行U盘中的可执行文件 6.配置交叉编译工具到环境变量 7.sc ...