聊聊你不知道的Java变量转型

单枪匹马你别怕,一腔孤勇又如何,这一路你可以哭,但不能怂。                 请关注:源码猎人

目录

简介

标识符命名规则

类变量(静态变量)

实例变量

局部变量

变量数据类型

基本类型之间的转换

常见面试题


简介

Java变量分为类变量、实例变量、局部变量。在Java语言中,所有的变量在使用前必须声明。定义变量就是要告诉编译器这个变量的数据类型,这样编译器才知道需要分配多少空间给它,以及它能存放什么样的数据。在程序运行过程中空间的值是变化的,这个内存空间就成为变量。为了便于操作,给这个变量取个名字,称为变量名。

变量名必须遵循标识符命名规则。

标识符命名规则

应以字母、下划线、美元符开头,后跟字母、下划线、美元符或数字,Java标识符大小写敏感,长度无限制

  1. java中能用作标识符的有:26个英文字母(大、小写),数字,下划线,美元符号$,但是不能以数字开头。 
  2. 类名首个字母必须大写,多个单词组成的,每个单词首字母都要大写。 
  3. 方法名一般首个字母小写(构造方法例外),多个单词组成方法名,后面单词首字母大写。 
  4. 变量命名规则同方法名名。 

不能使用java中的关键字做标识符

类变量(静态变量)

  1. 类变量也称为静态变量,在类中以static关键字声明,但必须在方法构造方法和语句块之外
  2. 无论一个类创建了多少个对象,类只拥有类变量的一份拷贝
  3. 静态变量除了被声明为常量外很少使用。常量是指声明为public/private,final和static类型的变量。常量初始化后不可改变
  4. 静态变量储存在静态存储区。经常被声明为常量,很少单独使用static声明变量
  5. 静态变量在程序开始时创建,在程序结束时销毁
  6. 与实例变量具有相似的可见性。但为了对类的使用者可见,大多数静态变量声明为public类型
  7. 默认值和实例变量相似。数值型变量默认值是0,布尔型默认值是false,引用类型默认值是null。变量的值可以在声明的时候指定,也可以在构造方法中指定。此外,静态变量还可以在静态语句块中初始化
  8. 静态变量可以通过:ClassName.VariableName的方式访问
  9. 类变量被声明为public static final类型时,类变量名称必须使用大写字母。如果静态变量不是public和final类型,其命名方式与实例变量以及局部变量的命名方式一致

实例变量

  1. 实例变量声明在一个类中,但在方法、构造方法和语句块之外
  2. 当一个对象被实例化之后,每个实例变量的值就跟着确定
  3. 实例变量在对象创建的时候创建,在对象被销毁的时候销毁
  4. 实例变量的值应该至少被一个方法、构造方法或者语句块引用,使得外部能够通过这些方式获取实例变量信息
  5. 实例变量对于类中的方法、构造方法或者语句块是可见的。一般情况下应该把实例变量设为私有。通过使用访问修饰符可以使实例变量对子类可见
  6. 实例变量具有默认值。数值型变量的默认值是0,布尔型变量的默认值是false,引用类型变量的默认值是null。变量的值可以在声明时指定,也可以在构造方法中指定
  7. 实例变量可以直接通过变量名访问。但在静态方法以及其他类中,就应该使用对象引用访问

局部变量

  1. 局部变量声明在方法、构造方法或者语句块中
  2. 局部变量在方法、构造方法、或者语句块被执行的时候创建,当它们执行完成后,变量将会被销毁
  3. 访问修饰符不能用于局部变量
  4. 局部变量只在声明它的方法、构造方法或者语句块中可见
  5. 局部变量是在栈上分配的
  6. 局部变量没有默认值,所以局部变量被声明后,必须经过初始化,才可以使用

变量数据类型

在Java中,变量分为两种:基本类型的变量和引用类型的变量。

其中,8种基本数据类型是Java语言内嵌的,在任何操作系统中都具有相同大属性,而引用数据类型是在Jawa程序中由编程人员自己定义的变量类型。

1、变量整数类型

整数类型变量用来存储整数数值,即没有小数部分的值。在Java中,为了给不同大小范围内的整数合理地分配存储空间,整数类型分为4种不同的类型:字节型(byte)、短整型(short),整型(int)和长整型(long)

类型位数范围默认值
byte8位(有符号)-2^7 ~ 2^7 - 10
short16位(有符号)-2^15 ~ 2^15 - 10
int32位(有符号)-2^31 ~ 2^31 - 10
long64位(有符号)-2^63 ~ 2^63 - 10L或0l

计算机内存的最小存储单元是字节(byte),一个字节就是一个8位二进制数,即8个bit。它的二进制表示范围从00000000~11111111,换算成十进制是0~255,换算成十六进制是00~ff。

2、变量浮点数类型

浮点数类型变量用来存储小数数值。在Java中,浮点数类型分为两种:单精度浮点数( float)和双精度浮点数( double)。 double型所表示的浮点数比 float型更精确,两种浮点数所占存储空间的大小以及取值范围如下图所示。

类型位数范围默认值
float32位(符合IEEE 754)1.4E-45 ~ 3.4028235E380.0f
double64 位(符合IEEE 754)4.9E-324 ~ 1.7976931348623157E308.0d

在Java中,一个小数会被默认为 double类型的值,因此在为一个float类型的变量赋值时需要注意一点,所赋值的后面一定要加上字母F(或者小写f),而为 double类型的变量赋值时,可以在所赋值的后面加上字符D(或小写d),也可以不加。

3、变量布尔类型

boolean类型只有两个值true和false,默认值是 false

boolean与是否为0没有任何关系,但是可以根据想要的逻辑进行转换

4、变量引用类型

引用数据类型非常多,大致包括:类、 接口类型、 数组类型、 枚举类型、 注解类型、 字符串型,简单来说,所有的非基本数据类型都是引用数据类型

只要是引用数据类型变量,其具体内容都是存放在堆中的,而栈中存放的是其具体内容所在内存的地址;在方法中定义的非全局基本数据类型变量,调用方法时作为参数是按数值传递的,而引用数据类型变量,调用方法时作为参数是按引用传递的

基本类型之间的转换

boolean类型与所有其他7种类型都不能进行转换。

在Java中,对于其他7中数值类型,它们之间都可以进行转换,但是可能会存在精度损失或者其他一些变化。转换分为自动转换和强制转换,对于自动转换(隐式)无需任何操作,而强制类型转换需要显式转换,即使用转换操作符(type)。

取值范围从小到大一次排序如下:

byteshort=charintlongfloatdouble

自动转换:

取值范围小的类型向取值范围大的类型转换时可以自动转换。

因为较大的类型(如int)要保存较小的类型(如byte),内存总是足够的,不需要强制转换。

int 可以直接赋值给 byte、short、char 等数据类型,而不需要强制转换,只要不超过该类型的表示范围都能自动转换。

在自动类型转化中,除了以下几种情况可能会导致精度损失以外,其他的转换都不能出现精度损失。

int--> float
long--> float
long--> double
float -->double

除了可能的精度损失外,自动转换不会出现任何运行时异常。

强制类型转换:

取值范围大的类型向取值范围小的类型转换时必须强制转换

强制转换采用转换操作符(type)。严格地说,将byte转为char不属于强制转换,因为从byte到char的过程其实是byte-->int-->char,所以widening和narrowing都有。强制转换除了可能的精度损失外,还可能使模(overall magnitude)发生变化。

在超范围强转时,需要对目标类型范围取余得到结果。

将浮点类型赋给整数类型的时候,会发生截尾(truncation)。也就是把小数的部分去掉,只留下整数部分。此时如果整数超出目标类型范围,一样将对目标类型的范围取余数。

 

基本数据类型转换规则:

  1. boolean类型与所有其他7种类型都不能进行转换
  2. 整数直接量可以直接赋值给byte、short、char,但不能超取值范围。
  3. byte、short、char型数据参与运算时,先一律转换为int再运算。

常见面试题

1、int强转byte时需要注意什么?

首先,int强转byte一定是发生在int值超过byte范围,这时需要int%byte取到结果。

例如:

byte number = (byte)257;

257超出了byte的[-128,127]的范围,所以将257除以byte的范围256(-128到127的范围)取余数得到1;

byte number = (byte)200;

需要注意的是,此时除了256取余数应该为-56,而不是200.

其他类型强转也是一样的道理

2、说一说常量和变量的区别?

常量指的是在程序运行期间不变的数据,而变量可以根据程序需要修改值。

常量定义格式为:

final 常量名 = 值

或

static final 数据类型 常量名 = 值

常量名一般全部大写,而变量一般使用驼峰格式。

 

 

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

源码猎人

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值