[JavaSE]数据类型

在这里插入图片描述

整型变量

整型 所占字节数 数据范围
byte 1个 [-128,127]
short 2个 [-32768,32767]
int 4个 [-2^31, 2^31-1]
long 8个 [-2^63, 2^63-1]

注意:所占字节数与操作系统无关
字节是计算机中表示空间大小的基本单位
计算机使用二进制表示数据. 我们认为 8 个二进制位(bit) 为一个字节(Byte).
1KB = 1024 Byte, 1MB = 1024 KB, 1GB = 1024 MB
4 个字节表示的数据范围是 -2^31 -> 2^31-1 , 也就大概是 -21亿 到 +21亿

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

在这里插入图片描述
如果超出范int的最大范围,就会出现溢出的情况

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

在这里插入图片描述
我们发现int最大值+1,反而成为最小值了,针对这种情况, 我们就需要使用更大范围的数据类型来表示,引入long长整型变量

  1. 基本语法格式和创建 int 变量基本一致, 只是把类型修改成 long
  2. 初始化设定的值为 10L , 表示一个长整型的数字. 10l 也可以
public class Solution {
    public static void main(String[] args) {
        System.out.println(Long.MAX_VALUE );
        System.out.println(Long.MIN_VALUE );
    }
}

在这里插入图片描述
相比于int ,long的取值范围更大

浮点型变量

浮点类型 所占字节数
float 4个
double 8个

都遵守 IEEE 标准

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

在这里插入图片描述
原因是因为整型除以整型还是整型,所以我们应改为double类型

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

在这里插入图片描述再看一个例子

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

结果却是
在这里插入图片描述
原因是因为尝试使用有限的内存空间表示可能无限的小数,势必会存在一定的精度误差。
单精度浮点型变量float初始值

float num = 1.0f; // 写作 1.0F 也可以 

由于表示的数据精度范围较小, 一般在工程上用到浮点数都
优先考虑 double, 不太推荐使用 float。

字符类型变量

char ch = 'A';
char a = '啊';

计算机中的字符本质上是一个整数. 在 C 语言中使用 ASCII 表示字符, 而 Java 中使用 Unicode 表示字符. 因此一个字符占用两个字节, 表示的字符种类更多, 包括中文。
注意:字节类型和字符类型互不相干

布尔类型变量

  1. boolean 类型的变量只有两种取值, true 表示真, false 表示假.
  2. Java 的 boolean 类型和 int 不能相互转换, 不存在 1 表示 true, 0 表示 false 这样的用法.
  3. boolean 类型有些 JVM 的实现是占 1 个字节, 有些是占 1 个比特位, 这个没有明确规定

字符串类型变量

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

转义字符 解释
\n 换行
\t 水平制表符
\ ’ 单引号
\ " 双引号
\ \ 反斜杠
public class Solution {
    public static void main(String[] args) {
        String str = "result = ";
        int a = 10;
        int b = 20;
        String result = str + a + b;
        System.out.println(result);
    }
}

在这里插入图片描述
以上代码说明, 当一个 + 表达式中存在字符串的时候, 都是执行字符串拼接行为.

变量的作用域

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

变量的命名规则

  1. 一个变量名只能包含数字, 字母, 下划线
  2. 数字不能开头
  3. 大小写敏感

类名建议大驼峰命名:FirstTest
变量名和方法名建议小驼峰命名法:maxValue

常量

  • 字面值常量
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 字面值常量, 双引号中可以有多个字符
  • final 关键字修饰的常量
    在这里插入图片描述
    报错原因是:常量不能在程序运行过程中发生修改.

类型转换

int 和 long/double 相互赋值

public class Solution {
    public static void main(String[] args) {
        int a = 10;
        long b = 20;
        a = b; // 编译出错, 提示可能会损失精度.
        b = a; // 编译通过.
        int a = 10;
        double b = 1.0;
        a = b; // 编译出错, 提示可能会损失精度.
        b = a; //编译通过.
    }
}

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

int 和 boolean 相互赋值

int a = 10;
boolean b = true;
b = a; // 编译出错, 提示不兼容的类型
a = b; // 编译出错, 提示不兼容的类型 

结论: int 和 boolean 是毫不相干的两种类型, 不能相互赋值

int字面值常量 给 byte 赋值

byte a = 100; // 编译通过
byte b = 256; // 编译报错, 提示从int转换到byte可能会有损失 

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

使用强制类型转换

int a = 0;
double b = 10.5;
a = (int)b;
int a = 10;
boolean b = false;
b = (boolean)a; // 编译出错, 提示不兼容的类型 

结论:

  • 强制类型转换可能会导致精度丢失. 如刚才的例子中, 赋值之后, 10.5 就变成 10 了, 小数点后面的部分被忽略.
  • 强制类型转换不是一定能成功, 互不相干的类型之间无法强转
类型转换小结
  1. 不同数字类型的变量之间赋值, 表示范围更小的类型能隐式转换成范围较大的类型.
  2. 如果需要把范围大的类型赋值给范围小的, 需要强制类型转换, 但是可能精度丢失.
  3. 将一个字面值常量进行赋值的时候, Java 会自动针对数字范围进行检查

数值提升

小结:
  1. 不同类型的数据混合运算, 范围小的会提升成范围大的.
  2. 对于 short, byte 这种比 4 个字节小的类型, 会先提升成 4 个字节的 int , 再运算
发布了60 篇原创文章 · 获赞 23 · 访问量 3317

猜你喜欢

转载自blog.csdn.net/weixin_44945537/article/details/104004757