基本数据类型

基本概念

标识符

标识符与内存中的某个位置对应,Java 中标识符的规范如下:

  • 必须由大小写字母、下划线、美元符号、数字组成
  • 首字母只能是大小写字母、下划线、美元符号

变量

变量的值可以改变,变量必须有具体的类型且类型不可改变。

常量

常量一旦初始化后,不可改变。

文字量

文字量直接出现在程序中,编译器直接使用,而不会对其进行任何操作。例如 3.14 等。

基本数据类型

数值型及布尔类型

  • 整型

    • byte:8位
    • short:16位
    • int:32位
    • long:64位
  • 浮点数
    • float:单精度浮点数,32位
    • double:双精度浮点数,32位
  • 布尔类型
    • boolean:8位,值只能是 true 或 false

数值型文字量:

数据类型 文字量
byte/short/int 开头非 0 则为10进制,开头为 0x 或 0X 则为 16进制(如 0x1a),开头为 0 则为8进制(如 027)
long 结尾跟 l 或 L(例如 32L,0x2FL)
float 结尾跟 f 或 F (例如 2.324f)
double 结尾跟 d 或 D(例如 3.14D)
boolean true 或 false

字符型

字符型文字量是单引号括起来的字符或转义序列,如 'A''\t' 等。Java 中的字符使用 16 位的 Unicode 字符编码方式。

char c1 = 'a';
char c2 = '\n';

字符串

Java 中用 String 这个类来描述字符串类型,跟 C 语言中的字符数组有很大不同。

String 类是 JDK 标准类集合中的一个,不需要额外引入即可使用:

String str = "hello world";

字符串文字量需要用双引号括起来,可以放转义字符(用 \ 反斜杠开头的字符)。多个字符串可以用 + 加号拼接:

Strint str = "hello" + "\nworld";

表达式

Java 的运算符跟 C 语言保持一致,支持:

  • 算术运算符:+ - * / % 及 ++、–
  • 赋值运算符:简单赋值运算符 = ,符合赋值运算符 +=、<<=、>>>=、&= 等
  • 关系运算符:算术比较 >、<= 等,类型比较运算 instanceof,相等关系运算符(可以比较数字、布尔、引用) ==、!=
  • 逻辑运算符:逻辑与 &&、逻辑或 ||、逻辑非 !
  • 条件运算符(表达式1 ? 表达式2 : 表达式3)

类型转换

类型转换包括两种情况:隐式转换(编译器完成)、显式转换(例如 (float)3.14)。

每个表达式都有类型,如果表达式的类型对于上下文不合适,可能导致:

  • 隐式类型转换
  • 如果无法自动转换类型,则编译器会报错

隐式类型转换有三种情况:

  • 赋值转换:将表达式类型转为目标变量的类型
  • 方法调用转换:转为方法中目标参数的类型
  • 字符串转换:任何类型(包括 null 类型)都可以转为字符串类型。如果 + 操作的一个操作数是字符串类型时会自动将另一个操作数转为字符串

转换时,可能导致的结果如下:

  • 扩展转换:从短类型转为长类型,byte->char->short->int->long->float->double。注意:可能丢失精度,例如从 int 类型转为 float 类型
  • 窄化转换:从长类型转为段类型,可能丢失信息

类型自动提升

当表达式中有多个类型的数据时,编译器会自动将所有数据变为最高精度的那个类型。精度由高到低依次为:double->float->long->int。

如果操作数中不包含以上4种类型的变量,则会自动把所有变量转为 int 类型。

byte b = 1;
short s = 22;
int i = 3;
long l = 666;
float f = 3.14f;
double d = 6.28; double rd = b * i + l * f / d;
float rf = b * i * f / l;
long rl = b * i + l / 8;
int ri = b * i + 88; int ri2 = b + s;

Java 基础-基本数据类型与表达式的更多相关文章

  1. java基础(数据类型,运算符)

    java基础之数据类型(变量) java中存在的数据有常量和变量 常量:在程序执行的过程中其值不可以发生改变 常量的分类 字面值常量 字面值常量的分类 常量 描述 字符串常量 用双引号括起来的内容 整 ...

  2. Java基础教程:Lambda表达式

    Java基础教程:Lambda表达式 本文部分内容引用自OneAPM:http://blog.oneapm.com/apm-tech/226.html 引入Lambda Java 是一流的面向对象语言 ...

  3. java基础-引用数据类型之二维数组(Array)

    java基础-引用数据类型之二维数组(Array) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 之前我们学习过了Java的一维数组,所谓的二维数组就是元素是一堆一维数组的数组,换 ...

  4. java基础-引用数据类型之一维数组(Array)

    java基础-引用数据类型之一维数组(Array) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.数组的定义 1>.为什么需要数组 保存一个数据可以定义一个变量,如果要保 ...

  5. Java基础-引用数据类型之集合(Collection)

    Java基础-引用数据类型之集合(Collection) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.为什么出现集合类 面向对象语言对事物的体现都是以对象的形式,所以为了方便 ...

  6. 小白——java基础之数据类型

    PS:此文章为小白提供,大佬请绕道!!!! 首先特别感谢大才哥给我提供这个平台,未来我希望把java这个版块的内容补全. 今天要讲的是数据类型,最最最基础的内容~ java标识符.数据类型.关键字 开 ...

  7. java基础-02数据类型

    基本类型 整数 byte byte 数据类型是8位.有符号的,以二进制补码表示的整数 最小值是 -128(-2^7) 最大值是 127(2^7-1) 默认值是 0 byte 类型用在大型数组中节约空间 ...

  8. 【Spring学习】【Java基础回顾-数据类型】

    Java基础回顾过程中,之前对于Java相关基础知识都是从这个人的博客看一些,那边的内容看一下,觉得不够系统化,决定用xmind脑图的形式,将Java基础知识回顾的作为一个系列,当前正在做的会包含: ...

  9. java基础知识-数据类型及转换

    1.java中的常量大体分为两种: <1>字面量常量 <2>自定义常量 2.java中常量(字面量)的分类:<1>,整数常量:直接出现的整数<2>,小数 ...

随机推荐

  1. Zabbix--04 自定义模版、web监控

    目录 一.自定义模版 1.创建模版 2.导出模版 3.监控TCP11种状态 3.2.重启zabbix-agent 3.3.测试监控项 4.导入模版文件 5.主机关联模版文件 6.查看最新数据 7.查看 ...

  2. 绑定class -vue

    1.值为对象 :class = "{ 'text-red': isActive }" data () { return { isActive : true } } :class = ...

  3. linux下安装MySQL(mariadb)

    MySQL(mariadb) MariaDB数据库管理系统是MySQL的一个分支,主要由开源社区在维护,采用GPL授权许可. 开发这个分支的原因之一是:甲骨文公司收购了MySQL后,有将MySQL闭源 ...

  4. 【机器人M号】题解

    题目 题目描述 3030年,Macsy正在火星部署一批机器人. 第1秒,他把机器人1号运到了火星,机器人1号可以制造其他的机器人. 第2秒,机器人1号造出了第一个机器人--机器人2号. 第3秒,机器人 ...

  5. SQL Server清理索引碎片

    DECLARE @SchemeName NVARCHAR(MAX)=N''; DECLARE @TableName NVARCHAR(MAX)=N''; DECLARE @IndexName NVAR ...

  6. Android与IOS的优缺点比较 对 Android 与 IOS 比较是个个人的问题。 就好比我来说,我两个都用。我深知这两个平台的优缺点。所以,我决定分享我关于这两个移动平台的观点。另外,然后谈谈我对新的 Ubuntu 移动平台的印象和它的优势。 IOS 的优点 虽然这些天我是个十足的 Android 用户,但我必须承认 IOS 在某些方面做的是不错。首先,苹果公司在他们的设备更新方面有更

    Android与IOS的优缺点比较 对 Android 与 IOS 比较是个个人的问题. 就好比我来说,我两个都用.我深知这两个平台的优缺点.所以,我决定分享我关于这两个移动平台的观点.另外,然后谈谈 ...

  7. 面向对象this关键字和概述和应用

    面向对象this关键字和概述和应用 package thisdemo; /** * 面向对象this关键字和概述和应用 * */ //定义老师类 class Teacher { private Str ...

  8. Oralce动态的创建按月的分区

    说明: XXX为一个配置表,里面配置了要分区的表明,即CODENO = 'PARTITIONTABLENAME',只有每个月月底的时候,才会进入IF的判断,此外还有一个定时任务,每天去执行即可. 存储 ...

  9. [转]Vue项目全局配置微信分享思路详解

    这篇文章给大家介绍了vue项目全局配置微信分享思路讲解,使用vue作为框架,使用vux作为ui组件库,具体内容详情大家跟随脚本之家小编一起学习吧 这个项目为移动端项目,主要用于接入公众号服务.项目采用 ...

  10. 大数据笔记(八)——Mapreduce的高级特性(A)

    一.序列化 类似于Java的序列化:将对象——>文件 如果一个类实现了Serializable接口,这个类的对象就可以输出为文件 同理,如果一个类实现了的Hadoop的序列化机制(接口:Writ ...