常量
常量代表程序运行过程中,不能再次改变的值。
常量的作用
- 固定的值 代表计算过程中经常用到的值便于程序计算(3.1415926…)
- 用来代表一个含义(例如UP====>分别代表上下左右四个常量)
什么样的值能代表常量?
- 固定不变的值 算作常量
可以认为所有基本类型的值 固定不变 是常量
- 特殊的常量(“abc”----->String)
String是一个引用数据类型,它的值很特殊,可以简单的视为常量。
- 自己创建的空间 存储一个值 让他固定起来 不能改变。
final int UP = 1;
变量
程序执行过程中可以改变,实际指的是内存空间(小容器)。
变量空间在创建(声明)的时候,必须指定数据类型,即变量空间的名字。里面只能存储一个内容(值/引用),变量空间里面的内容可以改变。
变量的创建/声明
语法格式如下:
数据类型 变量名字
*在创建变量需要注意变量命名问题
- 命名的规则
- 字母(大小写敏感) 数字(0-9不允许开头) 符号(英文符号:_ $)
中文(不推荐)- 命名的规约
- 类名字首字母大写(两个以上的单词 所有首字母大写)
- 变量名首字母小写(如果两个以上的单词 只有的首字母大写)遵循驼峰>式命名规则。
注意:变量是一个空间,可以只创建空间,里面不存放内容。变量空间创建后里面没有默认的内容(空),空的变量空间不能拿来使用!!!
例如:
byte x;//声明一个变量空间,存储的类型是byte类型
x = 1;//将1赋值到x的内存空间进行存储
底层原理解释:
1. 硬盘中创建一个后缀名为.java的文件,其中文件的内容是我们编写的源代码。
2. 将源文件编译成class文件(字节码文件)
3. 将硬盘中的内容加载到内存中执行(所有的执行都是在栈内存空间里)
发现问题
float e = 3.4;
运行警告⚠️:从double转换成float会有损失
原因分析:常量值在常量缓冲区是以二进制的形式存储的,常量一般以32bit存储。表达式的右边是3.4,因此是double数据类型(64bit),被复制一份之后,发现接收的是float类型(32bit),所以会有一部分精确度的损失。
解决方法:float e = 3.4F
问题衍生
从上面我们在衍生出一个问题:为什么下面段代码并没有出现上面相同的警告?
byte x = 1;
从上面的问题我们在衍生出一个问题为什么下面段代码并没有出现上面相同的警告?
问题解释:
1----->32bit
00000000 00000000 00000000 00000001
x----->8bit
00000001
赋值运算符(=)会实现自动类型转换
问题反思:为什么上面的例子不能实现自动转换?
答案:这是因为double和float计算方式不同,因此不能实现自动转换。
问题升级
long a = 2147483648;
我们知道2147483647是int类型的最大范围边界,如果运行上面程序,会出现错误:过大的整数:2147483648。编译器会认为平时不会取到这么大的整数,因此我们需要告诉编译器我们需要取得更大的数据。
解决方案:long a = 2147483648L;
(当数据超过int类型的取值范围时,需要在后面加上L来表示是long类型的数据)
注释
所有的注释不会被编译。
- 单行注释
// - 多行注释
/*
*/ - 文档注释
/**
*/
字符和字符串
char | String |
---|---|
基本数据类型 | 引用数据类型 |
‘d’ | " abc " |
String类型中注意""和NULL的区别:
""表示空串,NULL表示没有字符串(什么都没有)
三连博主,每天分享一个编程小技巧!!!