聊聊你不知道的Java变量转型
单枪匹马你别怕,一腔孤勇又如何,这一路你可以哭,但不能怂。 请关注:源码猎人
目录
简介
标识符命名规则
类变量(静态变量)
实例变量
局部变量
变量数据类型
基本类型之间的转换
常见面试题
简介
Java变量分为类变量、实例变量、局部变量。在Java语言中,所有的变量在使用前必须声明。定义变量就是要告诉编译器这个变量的数据类型,这样编译器才知道需要分配多少空间给它,以及它能存放什么样的数据。在程序运行过程中空间的值是变化的,这个内存空间就成为变量。为了便于操作,给这个变量取个名字,称为变量名。
变量名必须遵循标识符命名规则。
标识符命名规则
应以字母、下划线、美元符开头,后跟字母、下划线、美元符或数字,Java标识符大小写敏感,长度无限制
- java中能用作标识符的有:26个英文字母(大、小写),数字,下划线,美元符号$,但是不能以数字开头。
- 类名首个字母必须大写,多个单词组成的,每个单词首字母都要大写。
- 方法名一般首个字母小写(构造方法例外),多个单词组成方法名,后面单词首字母大写。
- 变量命名规则同方法名名。
不能使用java中的关键字做标识符
类变量(静态变量)
- 类变量也称为静态变量,在类中以static关键字声明,但必须在方法构造方法和语句块之外
- 无论一个类创建了多少个对象,类只拥有类变量的一份拷贝
- 静态变量除了被声明为常量外很少使用。常量是指声明为public/private,final和static类型的变量。常量初始化后不可改变
- 静态变量储存在静态存储区。经常被声明为常量,很少单独使用static声明变量
- 静态变量在程序开始时创建,在程序结束时销毁
- 与实例变量具有相似的可见性。但为了对类的使用者可见,大多数静态变量声明为public类型
- 默认值和实例变量相似。数值型变量默认值是0,布尔型默认值是false,引用类型默认值是null。变量的值可以在声明的时候指定,也可以在构造方法中指定。此外,静态变量还可以在静态语句块中初始化
- 静态变量可以通过:ClassName.VariableName的方式访问
- 类变量被声明为public static final类型时,类变量名称必须使用大写字母。如果静态变量不是public和final类型,其命名方式与实例变量以及局部变量的命名方式一致
实例变量
- 实例变量声明在一个类中,但在方法、构造方法和语句块之外
- 当一个对象被实例化之后,每个实例变量的值就跟着确定
- 实例变量在对象创建的时候创建,在对象被销毁的时候销毁
- 实例变量的值应该至少被一个方法、构造方法或者语句块引用,使得外部能够通过这些方式获取实例变量信息
- 实例变量对于类中的方法、构造方法或者语句块是可见的。一般情况下应该把实例变量设为私有。通过使用访问修饰符可以使实例变量对子类可见
- 实例变量具有默认值。数值型变量的默认值是0,布尔型变量的默认值是false,引用类型变量的默认值是null。变量的值可以在声明时指定,也可以在构造方法中指定
- 实例变量可以直接通过变量名访问。但在静态方法以及其他类中,就应该使用对象引用访问
局部变量
- 局部变量声明在方法、构造方法或者语句块中
- 局部变量在方法、构造方法、或者语句块被执行的时候创建,当它们执行完成后,变量将会被销毁
- 访问修饰符不能用于局部变量
- 局部变量只在声明它的方法、构造方法或者语句块中可见
- 局部变量是在栈上分配的
- 局部变量没有默认值,所以局部变量被声明后,必须经过初始化,才可以使用
变量数据类型
在Java中,变量分为两种:基本类型的变量和引用类型的变量。
其中,8种基本数据类型是Java语言内嵌的,在任何操作系统中都具有相同大属性,而引用数据类型是在Jawa程序中由编程人员自己定义的变量类型。
1、变量整数类型
整数类型变量用来存储整数数值,即没有小数部分的值。在Java中,为了给不同大小范围内的整数合理地分配存储空间,整数类型分为4种不同的类型:字节型(byte)、短整型(short),整型(int)和长整型(long)
类型 | 位数 | 范围 | 默认值 |
---|---|---|---|
byte | 8位(有符号) | -2^7 ~ 2^7 - 1 | 0 |
short | 16位(有符号) | -2^15 ~ 2^15 - 1 | 0 |
int | 32位(有符号) | -2^31 ~ 2^31 - 1 | 0 |
long | 64位(有符号) | -2^63 ~ 2^63 - 1 | 0L或0l |
计算机内存的最小存储单元是字节(byte),一个字节就是一个8位二进制数,即8个bit。它的二进制表示范围从00000000~11111111,换算成十进制是0~255,换算成十六进制是00~ff。
2、变量浮点数类型
浮点数类型变量用来存储小数数值。在Java中,浮点数类型分为两种:单精度浮点数( float)和双精度浮点数( double)。 double型所表示的浮点数比 float型更精确,两种浮点数所占存储空间的大小以及取值范围如下图所示。
类型 | 位数 | 范围 | 默认值 |
---|---|---|---|
float | 32位(符合IEEE 754) | 1.4E-45 ~ 3.4028235E38 | 0.0f |
double | 64 位(符合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)。
取值范围从小到大一次排序如下:
byte | short=char | int | long | float | double |
自动转换:
取值范围小的类型向取值范围大的类型转换时可以自动转换。
因为较大的类型(如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)。也就是把小数的部分去掉,只留下整数部分。此时如果整数超出目标类型范围,一样将对目标类型的范围取余数。
基本数据类型转换规则:
- boolean类型与所有其他7种类型都不能进行转换
- 整数直接量可以直接赋值给byte、short、char,但不能超取值范围。
- 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 数据类型 常量名 = 值
常量名一般全部大写,而变量一般使用驼峰格式。
聊聊你不知道的Java变量转型相关推荐
- Java数据类型及变量作业_day02、Java变量与数据类型
02_Java变量与数据类型 第二章 变量与数据类型 变量 变量的概述 变量是指内存中的一个存储区域,该区域要有自己的名称(变量名).类型(数据类型),该区域的数据可以在同一数据类型的范围内不断变化值 ...
- 【JAVA基础知识总结】JAVA对象转型之上转型对象与下转型对象
2019独角兽企业重金招聘Python工程师标准>>> JAVA对象转型分为两种:一种叫向下转型,而另一种是向上转型(父类对象的引用或者叫基类对象的引用指向子类对象,这就是向上转型) ...
- Java变量和运算符详解
Java变量和运算符 已在思维导图中对变量知识框图进行整理! 使用markdown进行详细记录 分以下几点进行介绍: 变量基本原理 基本类型和引用类型变量 变量使用和注意事项 运算符 1. 变量基本原 ...
- NDK开发 - C/C++ 访问 Java 变量和方法
上一篇有提到 JNI 访问引用数组,涉及了 C/C++ 访问 Java 实例的方法和变量.虽然在之前的开发中,并没有用到 C/C++ 范围 Java 层数据,但是这部分内容还是很有用的. 传送门:ND ...
- java 变量与常量_详解Java变量与常量
一.常量 用final修饰(也称最终变量) 常量在声明时必须赋初值,赋值后不能再修改值 常量名通常用全大写字母表示 声明时需要添加final或static final类型修饰符,例如: private ...
- 【JVM】Java变量的种类(提高版)
· Java变量按数据类型分,有:①基本数据类型:②引用数据类型: · Java变量按声明位置分,有:①成员变量:②局部变量: 见下图: 一.按数据类型分 1.1.基本数据类型 8种基本数据类型是Ja ...
- 怎么在js中取java变量的值
通过<%=java变量%>的方式赋值给js变量. 1.定义一个java变量 <%String a = "222";//定义一个string类型的java变量 %& ...
- java不可变量有哪些_5.Java变量
5.Java变量 所有的程序都使用变量临时存储各种数据, 在Java语言中变量必须在程序中被定义(或声明)后才能使用, 必须为每个变量确定一个具体类型.Java中变量分为基础类型变量和引用类型变量. ...
- 资深算法工程师万宫玺:Java工程师转型AI的秘密法宝——深度学习框架Deeplearning4j | 分享总结
资深算法工程师万宫玺:Java工程师转型AI的秘密法宝--深度学习框架Deeplearning4j | 分享总结 本文作者:杨文 2018-01-02 11:03 导语:一文读懂深度学习框架Deepl ...
最新文章
- Eclipse 调试器(引用IT168)
- Facebook AI的多任务多模态的统一Transformer
- 超全 Python IDE 武器库大总结,优缺点一目了然!
- sketch如何做设计稿交互_做交互设计不可不知的十大原则
- Node.js和NoSQL开发比特币加密货币应用程序(下)
- 一张图看透JavaScript原型关系:__proto__(对象原型)和prototype(函数原型)
- java死循环_java小白关于while死循环时处理办法的一发求助帖
- MyBatis 插件原理与自定义插件-用代理模式我们就要解决几个问题
- New template: condition
- python基础之元组定义进阶操作、字典定义进阶操作
- Redis 服务器安装
- Hyper-V 3 限定虚拟机可用的CPU利用率
- Mac双系统中Windows无法使用苹果鼠标键盘等问题的解决方法
- 基于 Flink SQL CDC的实时数据同步方案
- Ubuntu上安装NS3(最详细的图文介绍)
- st计算机编程语言,初学ST语言,有了这篇ST编程语言的相关知识就容易多了~
- IllegalArgumentException :argument type mismatch
- 华为云空间联系人是不是机主_电脑上整理华为云空间联系人数据
- ISO26262解析(四)——FMEDA
- 关于向量的点积和叉乘