万隆的笔记 万隆的笔记
博文索引
笔试面试
  • 在线学站

    • 菜鸟教程 (opens new window)
    • 入门教程 (opens new window)
    • Coursera (opens new window)
  • 在线文档

    • w3school (opens new window)
    • Bootstrap (opens new window)
    • Vue (opens new window)
    • 阿里开发者藏经阁 (opens new window)
  • 在线工具

    • tool 工具集 (opens new window)
    • bejson 工具集 (opens new window)
    • 文档转换 (opens new window)
  • 更多在线资源
  • Changlog
  • Aboutme
GitHub (opens new window)
博文索引
笔试面试
  • 在线学站

    • 菜鸟教程 (opens new window)
    • 入门教程 (opens new window)
    • Coursera (opens new window)
  • 在线文档

    • w3school (opens new window)
    • Bootstrap (opens new window)
    • Vue (opens new window)
    • 阿里开发者藏经阁 (opens new window)
  • 在线工具

    • tool 工具集 (opens new window)
    • bejson 工具集 (opens new window)
    • 文档转换 (opens new window)
  • 更多在线资源
  • Changlog
  • Aboutme
GitHub (opens new window)
  • 基础篇(上)

    • HelloWorld
    • 关键字、标识符和注释
    • 常量和进制的运算
    • 变量和类型转换
      • 变量的概念
      • 数据类型
      • 注意事项
      • 应用场景
      • 类型提升&强制转换
    • 基本数据类型运算细节
    • 运算符
  • 进阶

  • Java基础
  • 基础篇(上)
2022-02-09
目录

变量和类型转换

# 变量和类型转换

# 变量的概念

变量是内存中的一个存储区域,该区域有自己的名称(变量名)和类型(数据类型),该区域的数据可以在同一类型范围内不断变化。也就是说定义的变量可以用来不断的存放统一类型的常量,并可以重复使用。可以理解将变量理解成数学中的未知数。

定义变量的格式:数据类型 变量名 = 初始化值;

# 数据类型

在定义变量的时候,需要声明变量是属于那种数据类型。而Java是强语言类型,对于每一种数据都定义了明确且具体的数据类型,在内存中分配了不同的内存空间。Java数据类型分为两大类:

  • 基本数据类型

    • 数值型
      • 整数类型(byte,short,int,long)
      • 浮点类型(float,double)
    • 字符型(char)
    • 布尔型(boolean)
  • 引用数据类型

    • 类(class)

    • 接口(interface)

    • 数组([])

其中整数类型默认为int,浮点类型默认为double。因为这个机制,在定义和使用变量的时候会出现自动类型提升的现象。

基本数据类型使用的字节以及取值范围:

byte:1字节,-128 ~ 127

shor: 2字节,-2^15 ~ 2^15-1

int:4字节,-2^31~2 ^31-1 (上亿)

long: 8字节,略

float:4字节,略

double:8字节,略

char:2字节

Boolean:true或者false

# 注意事项

  • 确定使用变量的作用域(一对{}之间有效),避免超出范围
  • 初始化值,避免自动类型提升(尽管某些智能开发工具,会提示初始化值无意义,但是还是尽量养成初始化值的习惯)

# 应用场景

当数据不确定的时候。需要对数据进行存储时,就定义一个变量来完成存储动作。

# 类型提升&强制转换

类型转换是指将某种数据类型转换为另一种数据类型。类型转换分为两种:

  • 自动类型转换(隐式类型转换)
  • 强制类型转换(显式类型转换)

类型转换的原理:

  1. 类型转换操作在寄存器中完成。

  2. 转换以占用内存大的类型为主。小数据往大数据转换,数据保持完整,大数据往小数据转换,数据精度会损失。

  3. 负数会将以前的空位进行零填充。

表达式中数据类型自动提升:

  • 所有的byte类型、short类型和char的值将被提升到int类型。
  • 如果一个操作数是long类型,计算结果就是long类型。
  • 如果一个操作数是float类型,计算结果就是float类型。
  • 如果一个操作数是double类型,计算结果就是double类型。

自动类型提升的例子:

int x = 3;
byte y = 4;
x = x + y;

x是占用4个字节的整型变量,而y是占用1个字节的字节型变量,在进行相加运算的时候,计算机会将y变量进行自动类型转换,将y提升为占用4个字节的整型变量,最后x+y进行相加的结果也是个整型,这样就可以赋值给x变量。

自动类型提升失败的例子:

byte y = 4;
y = 3 + y;

上述代码在编译时期就会报错,因为3在Java中默认为int类型,而y被自动提升为整型,3 + y 语句计算结果为整型,整性是不可以赋值给byte类型的。当然你也可以进行强制类型转换:

y = (byte)(3 + y);

如上,强制类型转换只需要使用括号将要强制转换类型括起来即可。但是强制类型转换是比较危险的,容易丢失数据,因为强转就是将一些位强行砍掉。示例中的计算结果是正确的,那是因为砍掉之后的位刚好等于正确的结果:

00000000 00000000 00000000 0000 0111
强转后:
0111 = 7
上次更新: 5/28/2023, 10:57:53 PM
基本数据类型运算细节

基本数据类型运算细节→

最近更新
01
2025
01-15
02
Elasticsearch面试题
07-17
03
Elasticsearch进阶
07-16
更多文章>
Theme by Vdoing
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式