【Java基础】数据类型与变量
数据类型与变量
- 🍭数据类型
-
- 🍵基本数据类型
- 🍵引用数据类型
- 🍭常量与变量
-
- 🍵常量
-
- 字面常量
- 标识符常量
- 🍵变量
-
- 变量的概念
-
- 变量引出的起名-标识符规则
- 整型变量
- 长整型变量
- 短整型变量
- 字节型变量
- 浮点型变量
-
- 双精度浮点型double
- 单精度浮点型float
- 字符型变量
- 布尔型变量
- 🍭类型转换与类型提升
-
- 🍵类型转换
- 🍵类型提升
- 🍭最后
大家好,我是青菜不青。
今天分享的是Java基础中的数据类型与变量,我也还在持续学习中,希望对在看的小伙伴们也有所帮助!
希望大家一起不断成长。
🍭数据类型
Java中的数据类型分为两种:基本数据类型和引用数据类型。
🍵基本数据类型
基本数据类型有8种!
布尔类型、字符类型、字节类型、短整型、整数、长整型、双精度浮点型、单精度浮点型
一些注意点
- 在任意系统上,int都是四个字节,long都是8个字节
- 整型和浮点型都是有符号的
- 整型默认是int型,浮点型默认为double
🍵引用数据类型
引用这个词,如果对于学习C++的同学,并不陌生,引用即是别名,其实本质就是一种指针的表现。
在Java中引用数据类型与c++中的指针类似。
可以看一下下面的代码:
public static void main(String[] args) { String a = "Hello World!"; String b = a; a = "Hello Java"; String c = a; System.out.println(a); System.out.println(b); System.out.println(c); }
这段代码经历了两个阶段:
第一阶段,创建出a和b变量,a和b变量并不是保留了Hello World!这串字符串,而是以一种方式可以找到位于栈空间的这串字符串。就像指针一样。
第二个阶段,a改变了指向,c和a将指向一个空间,但是b仍然保留。
对于引用类型,我们现今作简单的了解,后续会加深对其的解释和理解的~~~
🍭常量与变量
🍵常量
常量:在程序中保持不变的量我们称之为常量,强制性更改常量是会报错的。
在Java中,常量又分为两种,一种是字面常量,另一种是标识符常量
字面常量
字母常量:直接以数字或者字符串的形式或是字符等等给出的,就称之为字母常量
例如:
- 直接给出的10,20,100
- “Hello World”
- ‘c’
- 布尔值:true,false
- 空常量:null
标识符常量
标识符常量是通过关键字final
定义的。它的使用和变量一样,必须要先声明后使用。
标识符常量也称符号常量~
举个例子:
此处我们只写main函数
public static void main(String[] args) { final int A = 10;// a = 12;报错 }
Java中约定常量标识符一般使用大写字母。和变量进行区分。
使用常量的优点:
- 增加可读性。尽量见名知意的起名方式
- 增加可维护性,只要在常量声明的地方更改常量值就可以了,其他地方使用到就会自动改变
这一点感觉和c语言中define很像
🍵变量
变量的概念
变量的基本属性:变量名,数据类型,存储单元,变量值。
变量名是我们自己起的名字
存储单元是在内存中的分布,有栈堆静态区等等存储
变量值是我们自动赋值的值
变量定义的语法:
数据类型 变量名 = 初始值
变量引出的起名-标识符规则
Java 对各种变量、方法和类等要素命名时使用的字符序列称为标识符。我们起的类名,方法名或者变量名都叫标识符
【标识符规则】:
- 由 26 个英文字母大小写,0-9,_或$ 组成
- 数字不可以开头。
- 标识符不能包含空格。
- 不可以使用关键字和保留字,但能包含关键字和保留字。
- Java 中严格区分大小写,长度无限制。
【起名建议】:
- 类名:每个单词首字母大写
- 方法名:首字母小写,以后的每一个单词首字母大写
- 变量名:与方法名规则相同
整型变量
int类型占4字节
对于变量的使用:
- 在定义的时候给出初始值
- 在定义的时候没有给初始值,但是在使用之前一定要进行初始化
public static void main(String[] args) { int a = 10; int b; b = 10; }
注意事项:
- 我们尽量在定义变量的时候就初始化,不知道初始化成什么的时候可以设置成0
- 如果使用之前没有给变量初始化,java的编译器会直接报错,不会像c语言一样出现随机值
- int类型表示范围是:-2^31~ 2^31-1
- int在任意系统下都是4个字节
长整型变量
long类型占8个字节
对于long类型,推荐初始化后面加L或者l
public static void main(String[] args) { int a = 10; long b = 10L; System.out.println(Long.MAX_VALUE);//查看Long表示的最大整数范围 System.out.println(Long.MIN_VALUE);//这个是最小 }
注意事项:
- 长整型变量初始化一般加L,也可以加小写l但是不好区分。
- 长整型在所有系统下都是8个字节,这里跟c语言就不同了。注意java中没有区分32位和64位系统了。
- 长整型表示的数值范围是:-2^63~ 2^63-1
短整型变量
short类型占2个字节
public static void main(String[] args) { short a = 10; System.out.println(a); System.out.println(Short.MAX_VALUE); System.out.println(Short.MIN_VALUE); }
注意事项:
- short的表示范围为:-32768 ~ 32767
字节型变量
byte类型占1个字节
public static void main(String[] args) { byte b = 10; System.out.println(b); System.out.println(Byte.MAX_VALUE); System.out.println(Byte.MIN_VALUE); }
注意事项:
- byte占用一个字节,表示类型范围是:-128~127
浮点型变量
注意事项:
- double占用字节为8字节,float占用字节为4字节
- 浮点型和整型在内存中存储的方式是不同的,所以表示的范围不能单纯的以2^n这种形式表示
- 浮点数是不可能一定精确的,会存在一定的精度误差,所以浮点数是一个近似值
- 通常情况下我们使用double会更多,因为比float表示的精度范围广。
双精度浮点型double
public static void main(String[] args) { double d = 1.22; System.out.println(d); double num = 1.1; System.out.println(num * num); }
单精度浮点型float
float类型在定义的时候最好加上F,或者f,用来和double类型作区分
public static void main(String[] args) { float num = 1.12f; System.out.println(num); }
字符型变量
字符类型占用2字节
public static void main(String[] args) { char a = 'A'; char b = '9'; char s = '好'; System.out.println(a); System.out.println(b); System.out.println(s); }
注意事项:
- java中使用单引号+单个字母的形式表示字符字母量
- java中使用Unicode表示字符,所以一个字符占用两个字节。
布尔型变量
布尔类型占用1个字节(这句话并不普遍适用====>java虚拟机规范中没有规定boolean占用多少字节,但是在Oracle公司的虚拟机实现中,boolean占用1个字节)
public static void main(String[] args) { boolean value = true; System.out.println(value); }
注意事项:
- 布尔类型是没办法和int类型转化的====> java中没有1表示true,0表示false这种说法
🍭类型转换与类型提升
🍵类型转换
类型转换是当不同类型变量相互赋值的时候,发生的操作。
java在类型检查这方便十分严格,不同类型相互赋值有时候是不可行的。
当类型不同时,就会发生类型转换了。
自动类型转换(隐式)
编译器自行处理的类型转换。直接将数据范围小的转换为数据范围大的。
例如上面的例子:a是整型变量,b是长整型,a赋值给b的时候会自动提升为long类型,然后赋值过去。但是龙类型比int类型范围大,赋值的时候会有数据丢失不安全,所以编译器报错了。
再看几个例子:
public static void main(String[] args) { float f = 123.12f; double d = 123.1212; d = f;// f = d;报错,double类型比float范围大,会丢失数据,不安全 byte b = 100;// byte b2 = 128;报错,byte类型是-128~127,128超过其表示范围,会丢失数据 }
强制类型转换(显示)
强制类型转换是人为手动强转类型的。这种情况下我们就可以完成从范围大的数据赋值给范围小的数据了。
public static void main(String[] args) { float f = 123.12f; double d = 123.1212; f = (float)d; byte b = 100; byte b2 = (byte)128; System.out.println(f); System.out.println(b2); }
注意事项:
- 强转不一定可以成功,不相干类型之间是不能互相转换的
🍵类型提升
不同数据之间进行相互运算的时候,数据类型小的会提升到数据类型大的。
比如int和long之间运算结果提升成long
此时想要用一个int类型来装载运算结果是不行的,因为结果已经提升为long了。
一般进行整型运算的时候,如果类型比int小,那么结果会转成int。如果类型中有long或是double类型的,结果就是long或double
如下是short转成了int。
如下是int转成了double。
扩展:字符串类型
Java中引入了String类型表示字符串
有时候我们需要将字符串和int类型进行转换
- int转String
public static void main(String[] args) { int num = 100; String str = num + ""; String str2 = String.valueOf(num); System.out.println(str); System.out.println(str2); }
- String转int
public static void main(String[] args) { String str = "100"; int num = Integer.parseInt(str); System.out.println(str); }
🍭最后
补博客补博客补博客。重要的事情说三遍!
文章如果有错误,还请小伙伴们多多指正哟!