文章目录

  • Java基础语法(二)——数据类型
  • 一、int 整型类型
    • 1.基本语法格式
    • 2.数值范围
    • 3.未定义时变量的默认初始值
    • 4.注意事项
  • 二、 long 长整型类型
    • 1.基本语法格式
    • 2.数值范围
    • 3.long 定义变量
    • 4.注意事项
  • 三、double 双精度浮点数类型
    • 1.基本语法格式
    • 2. double 定义变量
  • 四、float 单精度浮点数类型
    • 1.基本语法格式
    • 2.float 定义变量
  • 五、char 字符类型
    • 1.基本语法格式
    • 2.char 定义变量
    • 3.注意事项
  • 六、byte 字节类型
    • 1.基本语法格式
    • 2.数值范围
    • 3.byte 定义变量
    • 4.注意事项
  • 七、数值提升
    • 1.int 和 long 混合运算
    • 2.byte 和 byte 的运算
    • 3.小结
  • 八、short 短整型类型
    • 1.基本语法格式
    • 2.数值范围
    • 3.注意事项
  • 九、boolean 布尔类型
    • 1.基本语法格式
    • 2.注意事项
  • 基本数据类型总结
  • 十、String 字符串类型
    • 1.基本语法格式
    • 2.注意事项
    • 3.转义字符
    • 4.字符串常见操作
    • (1) + 操作, 表示字符串拼接
    • (2)+可用字符串和整数进行拼接
    • (3)小结
  • 十一、变量
    • 1.变量的作用域
    • 2.变量的命名规则
    • (1)命名规则
    • (2)软性要求
    • (3)小驼峰命名规则
  • 十二、常量
    • 1.字面值常量
    • 2. final 关键字修饰的常量
  • 十三、类型转换
    • 1.int 和 long/double 相互赋值
    • 2.int 和 boolean 相互赋值
    • 3.int字面值常量 给 byte 赋值
    • 4.强制类型转换
    • 5.小结
  • 完!!

接上篇Java基础语法(一)——初识Java

Java基础语法(二)——数据类型

本次介绍内容大纲
在这里插入图片描述

主要介绍上图的八种基本数据类型,引用数据类型先做了解即可。

一、int 整型类型

1.基本语法格式

int 变量名 = 初始值;

代码示例:

int num = 10; // 定义一个整型变量System.out.println(num) ;

2.数值范围

int 能够表示的范围是多大?

在C语言中,有 有符号数 和 无符号数 ,但是记住了,在Java 中没有所谓的无符号数!

我们看一下 int 表示的范围

在 Java 中 int 占 4个字节 ,32个 bit 位,最高位是符号位,剩下的31位全是 数值位 。

在这里插入图片描述

使用以下代码查看 Java 中的整型数据范围:

public class Test {public static void main(String[] args) {System.out.println(Integer.MAX_VALUE);System.out.println(Integer.MIN_VALUE);}}

编译结果:
在这里插入图片描述

在这里插入图片描述
所以验证了 int 的 最大值为 2 ^ 31-1 , 最小值 为 – 2 ^31.(约-21亿——21亿)

那么不禁有同学问了,如果我们想要打印一个Max+1,Min-1的值,打印出来的结果是什么呢?

 public static void main(String[] args) {System.out.println(Integer.MAX_VALUE + 1);System.out.println(Integer.MIN_VALUE - 1);}

编译结果:
在这里插入图片描述

Max +1的值= – 2 ^ 31

Min -1的值 =2^31 +1

为什么出现这样的结果呢?

首先 int 的数值范围表示是这样的:
在这里插入图片描述

所以当 int = Max_value + 1 时,正数变成负数

这个结论适合于所有的类型(小数 float double 除外)

3.未定义时变量的默认初始值

当变量未定义大小时,没有默认值

当我们未定义变量是多少,打印这个变量的数值时候,Java 的编辑器会直接报错,这就体现了Java的安全性。

在这里插入图片描述
在这里插入图片描述
如果运算的结果超出了 int 的最大范围, 就会出现溢出的情况。21亿这样的数字对于当前的大数据时代来说, 是很容易超出的.

针对这种情况, 我们就需要使用更大范围的数据类型来表示了。 Java 中提供了 long 类型来存储更大的数字。

4.注意事项

(1)int 表示变量的类型是一个整型

(2) 变量名是变量的标识. 后续都是通过这个名字来使用变量

(3) Java 中 = 表示赋值(和数学不一样), 意思是给变量设置一个初始值.

(4) 初始化操作是可选的, 但是建议创建变量的时候都显示初始化.

(5) 最后不要忘记分号, 否则会编译失败.

(6) // 表示注释. 注释作为代码的解释说明部分, 不参与编译运行.

二、 long 长整型类型

1.基本语法格式

long 变量名 = 初始值;

代码示例:

long num = 10L; // 定义一个长整型变量, 初始值写作 10l 也可以(小写的 L, 不是数字1). System.out.println(num) ;

2.数值范围

long 在C语言中占4 个字节 ,但是在 Java 中占据 8 个字节。

所以 long 范围大小是

–2 ^ 63 ——2 ^ 63 – 1

我们根据 Java 的代码看一下具体的数值

 public static void main(String[] args) {System.out.println(Long.MAX_VALUE);System.out.println(Long.MIN_VALUE);}

打印结果:
在这里插入图片描述

8个字节,总之是一个足够大的数字。这个数据范围远超过 int 的表示范围. 足够绝大部分的工程场景使用.

3.long 定义变量

public static void main(String[] args) {   // System.out.println(Long.MAX_VALUE);   // System.out.println(Long.MIN_VALUE);long a=10L;System.out.println(a);}

我们在定义长整型变量 a 的时候,如果 = 右边为 10的情况下, 默认为一个 int 类型的数据 ,为了更精确的表示 a 的值 ,我们在数值的后面加上 L (大小写无所谓,但是大写L更容易区分,小写的l 容易被认为是 1), 更精确的表示了 我们 给的 10 是一个长整型数据。

4.注意事项

(1) 基本语法格式和创建 int 变量基本一致, 只是把类型修改成 long

(2)初始化设定的值为 10L , 表示一个长整型的数字. 10l 也可以.

(3)使用 10 初始化也可以, 10 的类型是 int, 10L 的类型是 long, 使用 10 L 或者 10 l 更好一些.

(4)Java 中 long 类型占 8 个字节. 表示的数据范围 -2^ 63 -> 2 ^ 63-1

三、double 双精度浮点数类型

Java 中的 double 是 8 个字节

1.基本语法格式

double 变量名 = 初始值;

代码示例:

double num = 1.0;System.out.println(num)

2. double 定义变量

代码一:

public static void main(String[] args) {double num=12.5;System.out.println(num);}

代码编译效果:
在这里插入图片描述

成功打印出 double num 的变量值

代码二:

    public static void main(String[] args) {int a=1;int b=2;System.out.println(a/b);}

代码编译效果:
在这里插入图片描述
打印的结果为0, 两个 int 相除 ,得到的结果 也是 int 类型,所以 a/b 的结果等于0

在 Java 中, int 除以 int 的值仍然是 int(会直接舍弃小数部分).

如果想得到 0.5, 需要使用 double 类型计算.

public static void main5(String[] args) {double a = 1.0;double b = 2.0;System.out.println(a / b);}

在这里插入图片描述

代码三:

 public static void main(String[] args) {double c=1.1;double d=1.1;System.out.println(c*d);}

代码编译效果:

在这里插入图片描述
我们知道 1.1 * 1.1 = 1.21,那么为什么结果出现了 1.210000…2呢?最后一位的2 从何而来?

好的,这是由于 double 自身精度的问题,小数是没有精确的数字的。

Java 的 double 类型的内存布局遵守 IEEE 754 标准(和C语言一样), 尝试使用有限的内存空间表示可能无限的小数, 势必会存在一定的精度误差.

四、float 单精度浮点数类型

1.基本语法格式

float 变量名 = 初始值;

代码示例

  public static void main(String[] args) {float f=3.5f;System.out.println(f);}

编译结果
在这里插入图片描述

2.float 定义变量

如果我们给 float 定义一个变量 f=3.5,我们来看结果

在这里插入图片描述
在这里插入图片描述

在C 语言中我们3.5 是可以赋给 float 类型的变量的,为什么在Java中会进行报错呢?

这里我们就要普及一个知识点:

在这里插入图片描述
在 Java 当中 3.5、12.5、3.14 这些小数默认是 double 类型的,我们用 float 类型的变量接收,编译就会不通过 。我们在小数的后面加上一个f,强调这个数字是 float 类型的,这样编译就会通过了。

 public static void main(String[] args) {float f=3.5f;System.out.println(f);}

在这里插入图片描述

五、char 字符类型

在Java 中 ,char 类型的变量在内存中占 2 个字节

1.基本语法格式

char 变量名 = 初始值;

代码表示

public static void main(String[] args) {char ch='a';System.out.println(ch);}

编译结果
在这里插入图片描述

2.char 定义变量

代码一

public static void main(String[] args) {char ch='a';System.out.println(ch);}

编译结果
在这里插入图片描述

代码二

 public static void main(String[] args) {char ch='陈';System.out.println(ch);}

编译结果
在这里插入图片描述
我们可以用 char 类型 来定义一个 汉字

代码三:

 public static void main(String[] args) {char ch=97;System.out.println(ch);}

编译结果
在这里插入图片描述
我们可以给char 类型定义一个数字,编译的结果是在 Unicode 中相对应的 字符。

代码四:

 public static void main(String[] args) {char ch=-10;System.out.println(ch);}

编译结果:
在这里插入图片描述
在这里插入图片描述
我们知道 C语言中 可以用数字来表示相应的英文字符、常用字符,这张表就是ASCII表

与之相对应的是 Java 中也有这样的表格,叫做 Unicode ,他表示的字符范围更大,可以说包含了ASCII的范围。

但是,他们的共同点就是 字符与数字对应的起始都是从0开始的,没有负数表示的字符。

所以 Java 当中的 char 表示的一定是正数

3.注意事项

(1) Java 中使用 单引号 + 单个字母 的形式表示字符字面值.

(2) 计算机中的字符本质上是一个整数. 在 C 语言中使用 ASCII 表示字符, 而 Java 中使用 Unicode 表示字符. 因此一个字符占用两个字节, 表示的字符种类更多, 包括中文.

六、byte 字节类型

Java 中 byte 占 1个字节

1.基本语法格式

byte 变量名 = 初始值;

代码示例:

byte value = 0; System.out.println(value);

2.数值范围

byte 占 1 个字节 ,8 个 bit 位,所以它的范围是

-2 ^ 7——2 ^ 7 -1

-128——127

3.byte 定义变量

代码一:

public static void main(String[] args) {byte a=10;System.out.println(a);}

编译结果:
在这里插入图片描述
我们给 a 赋值为 10,编译打印10.

代码二:

public static void main(String[] args) {byte a=128;System.out.println(a);}

编译结果:
在这里插入图片描述
我们将 128 赋给 byte 类型的变量,但是发现编译时报错,说明什么?

赋值的时候,不能给当前赋值范围外的数字,否则会报错。包括 int 类型也是这样。

代码三:

public static void main(String[] args) {  byte b1=10;  byte b2=20;  byte b3=b1+b2;System.out.println(b3);}

编译结果:
在这里插入图片描述
有同学不仅问了: b1+b2=30,没有超过byte 的范围啊,为什么还会报错呢?

说明:

在这里插入图片描述

4.注意事项

(1)字节类型表示的也是整数. 只占一个字节, 表示范围较小 ( -128 -> +127 )

(2)字节类型和字符类型互不相干.

七、数值提升

在上面介绍byte 类型的时候,我们提到了整型提升,那么我们来了解一下具体的提升规则吧!

详细的整型提升规则请到我的往期博客——隐式类型转换之整型提升了解

1.int 和 long 混合运算

在这里插入图片描述

结论:

当 int 和 long 混合运算的时候, int 会提升成 long, 得到的结果仍然是 long 类型, 需要使用 long 类型的变量来接收结果. 如果非要用 int 来接收结果, 就需要使用强制类型转换.

类型提升的意义: 加快了计算机 CPU 计算运行的速度

2.byte 和 byte 的运算

在这里插入图片描述
结论

byte 和 byte 都是相同类型, 但是出现编译报错. 原因是,虽然 a 和 b 都是 byte, 但是计算 a + b 会先将 a 和 b 都提升成 int, 再进行计算, 得到的结果也是 int, 这时赋给 c, 就会出现上述错误.

由于计算机的 CPU 通常是按照 4 个字节为单位从内存中读写数据. 为了硬件上实现方便, 诸如 byte 和 short 这种低于4 个字节的类型, 会先提升成 int, 再参与计算.

正确的写法:
在这里插入图片描述

3.小结

类型提升小结:

(1)不同类型的数据混合运算, 范围小的会提升成范围大的.

(2) 对于 short, byte 这种比 4 个字节小的类型, 会先提升成 4 个字节的 int , 再运算.

八、short 短整型类型

1.基本语法格式

short 变量名 = 初始值;

代码示例:

public static void main(String[] args) {short value = 12;System.out.println(value);}

2.数值范围

在Java 中 short 占2 个字节, 16个bit位

所以他表示的数值范围就是

-32768 -> +32767

3.注意事项

(1)short 占用 2 个字节, 表示的数据范围是 -32768 -> +32767

(2)这个表示范围比较小, 一般不推荐使用.

九、boolean 布尔类型

boolean 在Java和 C++ 中有这种类型,在C语言中没有该类型

1.基本语法格式

boolean 变量名 = 初始值;

代码示例:

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

2.注意事项

(1) boolean 类型的变量只有两种取值, true 表示真, false 表示假.

(2)Java 的 boolean 类型和 int 不能相互转换, 不存在 1 表示 true, 0 表示 false 这样的用法.

(3)boolean 类型有些 JVM 的实现是占 1 个字节, 有些是占 1 个比特位, 这个没有明确规定.

代码一
在这里插入图片描述
编译结果如下:
在这里插入图片描述
所以 int 和 boolean 是两种毫不相干的类型,不能进行运算

代码二
在这里插入图片描述
在这里插入图片描述

将0,1 赋给 boolean 类型,则编辑器会报错
在这里插入图片描述

基本数据类型总结

数据类型 包装类 字节
int Integer 4
short Short 2
char Character 2
byte Byte 1
long Long 8
float Float 4
double Double 8
boolean Boolean 没有明确规定

十、String 字符串类型

把一些字符放到一起就构成了字符串

1.基本语法格式

String 变量名 = “初始值”;

代码示例:

 public static void main(String[] args) {String name = "zhangsan";System.out.println(name);}

编译结果:
在这里插入图片描述

2.注意事项

(1)Java 使用 双引号 + 若干字符 的方式表示字符串字面值.

(2) 和上面的类型不同, String 不是基本类型, 而是引用类型(后面重点解释).

(3)字符串中的一些特定的不太方便直接表示的字符需要进行转义.

3.转义字符

转义字符 解释
\n 换行
\t 水平制表符
单引号
双引号
\ 反斜杠

还有很多,目前先介绍这些转义字符…

4.字符串常见操作

(1) + 操作, 表示字符串拼接

代码一

   public static void main(String[] args) {String a = "hello";String b = "world";String c = a + b;System.out.println(c);}

编译结果如下:
在这里插入图片描述

(2)+可用字符串和整数进行拼接

代码二

    public static void main(String[] args) {String str = "result = ";int a = 10;int b = 20;String result = str + a + b;System.out.println(result);}

编译结果如下:
在这里插入图片描述

(3)小结

以上代码说明, 当一个 + 表达式中存在字符串的时候, 都是执行字符串拼接行为.

因此我们可以很方便的使用 System.out.println 同时打印多个字符串或数字.

十一、变量

1.变量的作用域

作用域就是该变量能生效的范围, 一般是变量定义所在的代码块 (大括号)

代码一:

 public static void main(String[] args) {int x = 10;System.out.println(x); // 编译通过;}

编译结果:
在这里插入图片描述
成功打印出10

代码二:

    public static void main(String[] args) {{int x = 10;System.out.println(x); // 编译通过;}System.out.println(x);}

编译结果:
在这里插入图片描述
此时x被定义在局部的代码块里,出了该局部范围后,x被销毁,所以第二次打印x编译未通过。

改正后的代码:

    public static void main(String[] args) {{int x = 10;System.out.println(x); // 编译通过;}int x=5;System.out.println(x);}

编译结果:
在这里插入图片描述
编译通过,打印出两个x 的值:10 、5

2.变量的命名规则

(1)命名规则

在这里插入图片描述

(2)软性要求

在这里插入图片描述

(3)小驼峰命名规则

当一个变量名由多个单词构成的时候, 除了第一个单词之外, 其他单词首字母都大写.

命名示例:

int maxValue = 100;

String studentName = “张三”;

十二、常量

上面讨论的都是各种类型的变量, 每种类型的变量也对应着一种相同类型的常量.

常量指的是运行时类型不能发生改变.

常量主要有以下两种体现形式:

1.字面值常量

10 int 字面值常量(十进制)
010 int 字面值常量(八进制) 由数字 0 开头. 010 也就是十进制的 8
0x10 int 字面值常量(十六进制) 由数字 0x 开头. 0x10 也就是十进制的 16
10L long 字面值常量. 也可以写作 10l (小写的L)
1.0 double 字面值常量. 也可以写作 1.0d 或者 1.0D
1.5e2 double 字面值常量. 科学计数法表示. 相当于 1.5 * 10^2
1.0f float 字面值常量, 也可以写作 1.0F
true boolen 字面值常量, 同样的还有 false
‘a’ char 字面值常量, 单引号中只能有一个字符
“abc” String 字面值常量, 双引号中可以有多个字符

2. final 关键字修饰的常量

在这里插入图片描述
编译结果如下:

在这里插入图片描述
Java 中的 final 类似与 C 语言中的 const ,使得修饰的变量变成了常变量,常量不能在程序运行过程中发生修改.

十三、类型转换

Java 作为一个强类型编程语言, 当不同类型之间的变量相互赋值的时候, 会有较严格的校验

我们通过下面几个代码来了解数据的类型转换:

1.int 和 long/double 相互赋值

代码一
在这里插入图片描述
long 表示的范围更大, 可以将 int 赋值给 long, 但是不能将 long 赋值给 int.

代码二
在这里插入图片描述
double 表示的范围更大, 可以将 int 赋值给 double, 但是不能将 double 赋值给 int.

结论:

不同数字类型的变量之间赋值, 表示范围更小的类型能隐式转换成范围较大的类型, 反之则不行.

2.int 和 boolean 相互赋值

代码
在这里插入图片描述
结论: int 和 boolean 是毫不相干的两种类型, 不能相互赋值.

3.int字面值常量 给 byte 赋值

代码如下
在这里插入图片描述
注意: byte 表示的数据范围是 -128 -> +127, 256 已经超过范围, 而 100 还在范围之内.

结论: 使用字面值常量赋值的时候, Java 会自动进行一些检查校验, 判定赋值是否合理.

4.强制类型转换

如何使用强制类型转换?

代码一示例:

在这里插入图片描述
编译结果:
在这里插入图片描述
结果成功编译,使用强制类型转换,将int 类型的数据转换为 byte,使得a的值可以赋给 b.

代码二:
在这里插入图片描述
编译结果:
在这里插入图片描述
所以我们得知,并不是所有类型的数据都可以强制类型转换。

结论:
在这里插入图片描述

5.小结

(1)不同数字类型的变量之间赋值, 表示范围更小的类型能隐式转换成范围较大的类型.

(2)如果需要把范围大的类型赋值给范围小的, 需要强制类型转换, 但是可能精度丢失.

(3)将一个字面值常量进行赋值的时候, Java 会自动针对数字范围进行检查.

最后,我们将强制类型转换和隐式类型转换联系在一起,看一下两者的区别:

在这里插入图片描述

好了,这次的Java数据类型的知识就分享到这里,感谢大家的欣赏与关注!!

谢谢欣赏!!!!

Java基础语法(三)——运算符已更新,欢迎大家来关注哦!!

完!!