【JavaSE】数据类型和运算符

本文介绍了Java中的数据类型分类,包括基本数据类型(如整型、浮点型、字符型、布尔型)及其变量概念,以及类型转换和运算符的使用,展示了Java编程的基础知识。
摘要由CSDN通过智能技术生成

目录

前言

数据类型

1. 数据类型的分类

2. 基本数据类型

变量

1. 概叙

2. 整型变量

3. 字节型 & 短整型 & 长整型变量

4. 单 / 双精度浮点型变量

5. 字符型变量

6. 布尔型变量

类型转换

1. 自动类型转换(隐式)

2. 强制类型转换(显式) 

补充:类型提升

字符串类型

运算符

1. 算术运算符

2. 增量运算符

3. 自增/自减运算符

4. 关系运算符

5. 逻辑运算符

6. 位运算符

7. 移位操作符

8. 条件运算符

结语


前言

Java是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承、指针等概念,不仅如此,Java语言还具有简单性、面向对象、分布式、健壮性、安全性、跨平台性、可移植性、多线程与动态性等特点。总之,作为一门优秀的程序设计语言,Java是值得我们认真去深入学习的,从今天起,我们也将正式开启Java的学习之旅!

数据类型

1. 数据类型的分类

在Java中,数据类型主要分为两类:基本数据类型引用数据类型

2. 基本数据类型

数据类型关键字字节数数值范围
字节型byte1 个字节-128 ~ 127
短整型short2 个字节-32768 ~ 32767
整型int4 个字节-2^31 ~ 2^31 - 1
长整型long8 个字节-2^63 ~ 2^63 - 1
单精度浮点数float4 个字节一般不关注
双精度浮点数double8 个字节一般不关注
字节型char2 个字节0 ~ 65535
布尔型boolean无明确规定true 和 false
  • 没有long long这种类型
  • 整型和浮点型都默认带有符号的
  • 整型默认为int类型,浮点型默认为double类型
  • 字符串属于引用数据类型,后续我们会先详细介绍

变量

1. 概叙

在Java中,我们会将那些经常改变的内容称为变量,像人的身高,岁数的增长,成绩分数的多少等等。而数据类型就是用来定义不同种类的变量的。

2. 整型变量

// 在定义时就给初始值
public static void main(String[] args) {
    int a = 10;
    System.out.println(a);
}

// int型变量所能表示的范围
System.out.println(Integer.MAX_VALUE); //2147483647
System.out.println(Integer.MIN_VALUE); //-2147483648

注意事项:

  • int类型无论在哪种系统下都是4个字节
  • int的表示范围为:-2^31 ~ 2^31 - 1
  • 变量在使用前要记得赋值,否则编译会报错
  • int的包装类型是Integer(可以简单理解为plus版的int)

3. 字节型 & 短整型 & 长整型变量

public static void main(String[] args) {
    byte b = 10; // 字节型
    System.out.println(b);

    short s = 10; // 短整型
    System.out.println(s);

    long l = 10L; // 长整型
    System.out.println(l);
}

// byte、short、long型变量所能表示的范围
System.out.println(Byte.MAX_VALUE); //127
System.out.println(Byte.MIN_VALUE); //-128

System.out.println(Short.MAX_VALUE); //32767
System.out.println(Short.MIN_VALUE); //-32768

System.out.println(Long.MAX_VALUE); //9223372036854775807
System.out.println(Long.MIN_VALUE); //-9223372036854775808

注意事项:

  • byte类型在哪种系统下都是1个字节
  • byte的包装类型为Byte
  • short类型在哪种系统下都是2个字节
  • short的包装类型为Short
  • long在初始化时,在要后面加上L,以便区分
  • long类型在哪种系统下都是8个字节
  • long的包装类型为Long

4. 单 / 双精度浮点型变量

public static void main(String[] args) {
    float a = 1.0F; // 单精度浮点型
    System.out.println(a);
    
    double b = 2.0; // 双精度浮点型
    System.out.println(b);
}

注意事项: 

  • float类型在哪种系统下都是4个字节
  • float在初始化时,在要后面加上F,以便区分
  • float的包装类型为Float
  • double类型在哪种系统下都是8个字节
  • double的包装类型为Double

(浮点型和整型在内存中的存储方式不同,所以它不能单纯用 2^n 的形式来计算;任何一个浮点数都没有一个非常精确的值,但我们可以精确到具体小数点后第几位)

5. 字符型变量

public static void main(String[] args) {
    char c1 = 'A';  // 大写字符
    char c2 = '1';  // 数字
    char c3 = '呵'; // 中文字符 
    System.out.println(c1);
    System.out.println(c2);
    System.out.println(c3);
}

注意事项:

  • Java中使用 单引号+单个字母 的形式来表示字符变量
  • 在Java使用的是Unicode来表示字符,跟C语言的ASCII不一样
  • 一个字符占2个字节,因此可以表示的字符种类就更多,也包括中文字符
  • char的包装类型为Character

6. 布尔型变量

public static void main(String[] args) {
    boolean a = true;
    System.out.println(a);

    boolean b = false;
    System.out.println(b);
}

注意事项: 

  • boolean类型的变量只有两种取值,true表示真,false表示假。在Java中,不存在 1 表示真,0 表示假
  • boolean类型没有明确规定占几个字节,且它不能和其他类型进行转换
  • boolean的包装类型为Boolean

类型转换

在Java中,当参与运算数据类型不一致时,就会进行类型转换,Java中类型转换主要分为两种:自动类型转换(隐式)和强制类型转换(显式)

1. 自动类型转换(隐式)

顾名思义,在代码编译时,编译器会自动进行类型转换,一般在数据类型小的转为数据类型大的时候会自动转换

2. 强制类型转换(显式) 

当进行操作时,代码需要我们自己强制类型转换才能完成,编译器无法自动完成,一般在数据类型大的转为数据类型小的时候会出现。我们通常采用 (目标类型) + 目标变量 的方式来强制类型转换

注意事项:

  • 在强制类型转换时,可能会使数据的精度丢失,要特别注意
  • 当我们将一个变量进行赋值时,Java会自动帮我们检查数字是否在该类型的表示范围之内
  • 强制类型转换不一定能成功,而且不相干的类型之间是无法相互转换的,比如boolean和其他类型

补充:类型提升

不同类型的数据进行运算时,数据类型小的会自动提升到数据类型大的一边,举个例子

  • 当 int 和 long 在一起运算时,int 会被提升为 long,所以就会出现下面的情况:c 因为是 int 类型,无法保存 a + b 得到的 long 类型,会出现丢失数据

  • byte 和 byte 的运算

为什么 byte 和 byte 相加后不能赋值给同为 byte 类型的 c 呢?原因在于:a 和 b 在相加前就已经被编译器自动提升为了 int 类型,再来相加,得到的结果当然也就为 int 类型啦,所以将结果直接赋值给 c 就会编译出错。

这种情况在 short 和 short 的运算也会出现,因为在计算机上,CPU通常是按照 4 个字节为单位从内存中读写数据,为了硬件上实现方便,所以低于 4 个字节的类型如 byte 和 short 类型就会先提升成 int,接着再参与计算

字符串类型

这个是最特殊的类型,不同于 C/C++ ,Java单独为字符串创建了一个专门的数据类型 —— String

在这里我们就简单介绍一下字符串类型,关于它的更多知识点我会在后面单独开一篇博客详细讲解的

运算符

1. 算术运算符

加法减法乘法除法取模
+-*/%

简单使用:

 注意事项: 

  • 以上运算符都是二元运算符,使用时需要有两个操作数
  • 在使用除法和取模时,右操作数不能为 0,否则会出现算术异常

  • 取模不仅可以对整数取模,也可以对 double 取模,不过没有实际意义,我们还是习惯对整数取模
  • 当两侧的操作数类型不一样时,数据类型小的会自动提升到数据类型大的一边

2. 增量运算符

加等

减等

乘等

除等

取模等

+=

-=

*=

/=

%=

该类运算符在完成操作后,会将结果直接赋值给左操作数

我们在上面讲类型提升的时候说道:“不同类型的数据进行运算时,数据类型小的会自动提升到数据类型大的一边”,但对于增量操作符来说,它会在计算的时候自动帮我们进行类型转换,如下:

3. 自增/自减运算符

4. 关系运算符

相等不相等小于大于小于等于大于等于
==!=<><=

>=

注意:关系运算符最后的计算结果只有两种情况:true 或者 false,是 boolean 类型

5. 逻辑运算符

逻辑与逻辑或逻辑非
&&||
一假全假一真全真真假互变

要注意的是:逻辑运算符的计算结果都是 boolean 类型,true 或者 false

短路求值:我们先来看一个例子

明明我们的除数为 0,应该会提示算术异常,那为什么这里没有提示呢?

这就是所谓的短路情况:

  • 对于 &&,如果左侧表达式值为 false,那么结果就一定是 false,不需要再计算右侧表达式
  • 对于 | |,如果左侧表达式值为 true,那么结果就一定是 true,不需要再计算右侧表达式
  • 但对于 & 和 | 来说,则不会发生短路

6. 位运算符

按位与按位或按位异或按位取反
&|^~
  • 按位与 &:如果两个二进制位都是1,则结果为1,否则结果为0
  • 按位或 | :如果两个二进制位都是0,则结果为0,否则结果为1
  • 按位取反~ :如果该位为0则转为1,是1则转为0(全部取反)
  • 按位异或 ^ :如果两个二进制位相同,则结果为0,相异则结果为1

7. 移位操作符

左移右移无符号右移
<<>>>>>

舍弃最左侧的数

最右侧补0

舍弃最右侧的数

最左侧补符号位

舍弃最右侧的数

最左侧补0

注意事项:

  • 移位操作符都是按照比特位来进行移位运算的
  • 左移时会丢弃掉符号位,因此正数左移可能会使结果变负
  • 左移一位相当于原数字 * 2^1,左移n位就相当于原数字 * 2^n
  • 右移一位相当于原数字 / 2^1,右移n位就相当于原数字 / 2^n

8. 条件运算符

表达式1(boolean类型)  ?表达式2 :表达式3
  • 表达式1 的值为 true 时,整个表示式的值就为 表达式2
  • 表达式1 的值为 false 时,整个表示式的值就为 表达式3

这是Java中唯一一个三目运算符,必须要注意,表达式1要为 boolean 类型

结语

这是我的第一篇Java博客,其实在学习Java的时候,感觉跟C语言有很多相似之处,数据类型啊、运算符啊都很类似,所以打好C语言的基础对学习其他语言真的很有帮助,但是学习Java终究是一条艰难险阻的路。

说实话,这篇博客我拖延了一个星期才终于把它写完,果然放假后我还是一如既往地摆烂,现在临近开学了,才会想着努力学习,忏悔自己摆烂的所作所为。唉~,终于写完了这篇博客,就以此为鉴吧,希望自己能够找回状态,规划好新学期,重点是多敲代码!!!

希望大家能喜欢这篇文章,有总结不到位的地方还请多多谅解,若有出现纰漏,希望大佬们看到错误之后能够在私信或评论区指正,博主会及时改正,共同进步!

  • 17
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值