前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Java基础语法(二)——数据类型

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

作者头像
RAIN7
发布2021-08-11 16:32:43
6060
发布2021-08-11 16:32:43
举报

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

本次介绍内容大纲

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

一、int 整型类型

1.基本语法格式

int 变量名 = 初始值;

代码示例:

代码语言:javascript
复制
int num = 10; // 定义一个整型变量
System.out.println(num) ;

2.数值范围

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

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

  我们看一下 int 表示的范围

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

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

代码语言:javascript
复制
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的值,打印出来的结果是什么呢?

代码语言:javascript
复制
 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 变量名 = 初始值;

代码示例:

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

2.数值范围

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

所以 long 范围大小是

–2 ^ 63 ——2 ^ 63 - 1

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

代码语言:javascript
复制
 public static void main(String[] args) {
        System.out.println(Long.MAX_VALUE);
        System.out.println(Long.MIN_VALUE);
    }

打印结果:

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

3.long 定义变量

代码语言:javascript
复制
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 变量名 = 初始值;

代码示例:

代码语言:javascript
复制
double num = 1.0;
System.out.println(num)

2. double 定义变量

代码一:

代码语言:javascript
复制
public static void main(String[] args) {
        double num=12.5;
        System.out.println(num);
    }

代码编译效果:

成功打印出 double num 的变量值

代码二:

代码语言:javascript
复制
    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 类型计算.

代码语言:javascript
复制
public static void main5(String[] args) {

        double a = 1.0;
        double b = 2.0;
        System.out.println(a / b);

    }

代码三:

代码语言:javascript
复制
 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 变量名 = 初始值;

代码示例

代码语言:javascript
复制
  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 类型的,这样编译就会通过了。

代码语言:javascript
复制
 public static void main(String[] args) {
        float f=3.5f;
        System.out.println(f);
    }

五、char 字符类型

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

1.基本语法格式

char 变量名 = 初始值;

代码表示

代码语言:javascript
复制
public static void main(String[] args) {
        char ch='a';
        System.out.println(ch);
    }

编译结果

2.char 定义变量

代码一

代码语言:javascript
复制
public static void main(String[] args) {
        char ch='a';
        System.out.println(ch);
    }

编译结果

代码二

代码语言:javascript
复制
 public static void main(String[] args) {
        char ch='陈';
        System.out.println(ch);
    }

编译结果

  我们可以用 char 类型 来定义一个 汉字

代码三:

代码语言:javascript
复制
 public static void main(String[] args) {
        char ch=97;
        System.out.println(ch);
    }

编译结果

  我们可以给char 类型定义一个数字,编译的结果是在 Unicode 中相对应的 字符。

代码四:

代码语言:javascript
复制
 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 变量名 = 初始值;

代码示例:

代码语言:javascript
复制
byte value = 0; 
System.out.println(value);

2.数值范围

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

-2 ^ 7——2 ^ 7 -1 -128——127

3.byte 定义变量

代码一:

代码语言:javascript
复制
public static void main(String[] args) {
        byte a=10;
        System.out.println(a);
    }

编译结果:

我们给 a 赋值为 10,编译打印10.

代码二:

代码语言:javascript
复制
public static void main(String[] args) {
        byte a=128;
        System.out.println(a);
    }

编译结果:

  我们将 128 赋给 byte 类型的变量,但是发现编译时报错,说明什么?

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

代码三:

代码语言:javascript
复制
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 变量名 = 初始值;

代码示例:

代码语言:javascript
复制
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 变量名 = 初始值;

代码示例:

代码语言:javascript
复制
 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 变量名 = “初始值”;

代码示例:

代码语言:javascript
复制
 public static void main(String[] args) {
        String name = "zhangsan";
        System.out.println(name);
    }

编译结果:

2.注意事项

(1)Java 使用 双引号 + 若干字符 的方式表示字符串字面值. (2) 和上面的类型不同, String 不是基本类型, 而是引用类型(后面重点解释). (3)字符串中的一些特定的不太方便直接表示的字符需要进行转义.

3.转义字符

转义字符

解释

\n

换行

\t

水平制表符

单引号

"

双引号

\

反斜杠

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

4.字符串常见操作

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

代码一

代码语言:javascript
复制
   public static void main(String[] args) {
        String a = "hello";
        String b = "world";
        String c = a + b;
        System.out.println(c);
    }

编译结果如下:

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

代码二

代码语言:javascript
复制
    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.变量的作用域

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

代码一:

代码语言:javascript
复制
 public static void main(String[] args) {

        int x = 10;
        System.out.println(x); // 编译通过;
    }

编译结果:

成功打印出10

代码二:

代码语言:javascript
复制
    public static void main(String[] args) {

        {
            int x = 10;
            System.out.println(x); // 编译通过;
        }
        System.out.println(x);
    }

编译结果:

  此时x被定义在局部的代码块里,出了该局部范围后,x被销毁,所以第二次打印x编译未通过。

改正后的代码:

代码语言:javascript
复制
    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基础语法(三)——运算符已更新,欢迎大家来关注哦!!

完!!

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021-04-01 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 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.小结
                                                                                              • 完!!
                                                                                              领券
                                                                                              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档