JavaSE-02变量和数据类型
变量
变量是可变的,如x,y。分为两种,基本类型的变量和引用类型的变量。
基本数据类型
基本数据类型是CPU可以直接进行运算的类型。Java定义了以下几种基本数据类型:
- 整数类型:byte,short,int,long
- 浮点数类型:float,double
- 字符类型:char
- 布尔类型:boolean
基本数据类型在定义变量时使用,目的是在内存里开辟空间。此时变量就是这空间的地址,根据这个地址,获取这个空间存储的数据。
注:布尔类型boolean
只有true
和false
两个值。
举例:
public class Main {
public static void main(String[] args) {
int x = 100; // 定义int类型变量x,并赋予初始值100
System.out.println(x); // 打印该变量的值
float y = 100F;//100f
double d = 100;
char = '97';
boolean b = true;
}
}
基本数据类型在内存开辟的大小:
- byte 1字节
- short 2字节
- int 4字节
- long 8字节
- float 4字节
- double 8字节
- char 8字节
- boolean 1bit
引用类型
除了上述基本类型的变量,剩下的都是引用类型。例如,引用类型最常用的就是String
字符串:
String s = "hello";
还有使用类 定义变量存储类。
常量
定义变量的时候,如果加上final
修饰符,这个变量就变成了常量:
final double PI = 3.14; // PI是一个常量
常量在定义时进行初始化后就不可再次赋值,再次赋值会导致编译错误。
var关键字
有些时候,类型的名字太长,写起来比较麻烦。例如:
StringBuilder b = new StringBuilder();
这个时候,如果想省略变量类型,可以使用var
关键字:
var b = new StringBuilder();
编译器会根据赋值语句自动推断出变量b
的类型是StringBuilder
。
变量的作用范围
在Java中,多行语句用{ }括起来。很多控制语句,例如条件判断和循环,都以{ }作为它们自身的范围,例如:
if (...) { // if开始
...
while (...) { // while 开始
...
if (...) { // if开始
...
} // if结束
...
} // while结束
...
} // if结束
只要正确地嵌套这些{ },编译器就能识别出语句块的开始和结束。而在语句块中定义的变量,它有一个作用域,就是从定义处开始,到语句块结束。超出了作用域引用这些变量,编译器会报错。举个例子:
{
...
int i = 0; // 变量i从这里开始定义
...
{
...
int x = 1; // 变量x从这里开始定义
...
{
...
String s = "hello"; // 变量s从这里开始定义
...
} // 变量s作用域到此结束
...
// 注意,这是一个新的变量s,它和上面的变量同名,
// 但是因为作用域不同,它们是两个不同的变量:
String s = "hi";
...
} // 变量x和s作用域到此结束
...
} // 变量i作用域到此结束
定义变量时,要遵循作用域最小化原则,尽量将变量定义在尽可能小的作用域,并且,不要重复使用变量名。
自动转换
变量赋值时,发生自动转换的赋值:
char->int->long->float->double
byte->short->int->long->float->double
容量小的可以自动转换赋值给容量大的数据类型变量。char、byte、short 不能相互转化,而且他们任意一个参加计算,或者自身相互运算都会转换成int类型进行计算存储。
public class AutoConvert{
public static void main(String[] args){
int num = 'a';
double d1 = 80;
System.out.println(num);
System.out.println(d1);
//自动转换细节
//char->int->long->float->double
//byte->short->int->long->float->double
//多种数据类型的数据混合运算时,会转换成精度最大的数据类型进行计算
int num1 = 10;
//float sum = num1 + 1.1;错 1.1 默认会认为是Double类型
//double sum = num1 + 1.1;
float sum = num1 + 1.1F;
float sum1 =num1 + (float)1.1;
System.out.println(sum1);
//byte short不能和char自动转换,他们只要任意一个参与运算,结果都是直接转成int
byte a1 = 10; //数值直接赋给byte 可以
//byte = num1; //变量需要判断类型大小。 错误
//char b1 = a1; byte不能自动转换成char
//boolean 不参与转换
}
}
强制转换
大容量类型变量赋值给小的,可能导致精度损失,谨慎使用
public class ForceConvert{
public static void main(String[] args){
//强制类型转换 大容量类型变量赋值给小的,可能导致精度损失 谨慎使用
int n1 = (int)1.9;//(int)1.9 + 1.2 (int)只会直接对1.9生效,不是(1.9 + 1.2)
//(int)(1.9 + 1.2) 正确
System.out.println(n1); // 1
int n2 = 2000;
byte n3 = (byte)n2;
System.out.println(n3); //-48
}
}
注释
//单行注释
/*
多行注释
多行注释
*/
/**
*@author Roderick
文档注释
*/
本文来自博客园,作者:九天揽月丶,转载请注明原文链接:https://www.cnblogs.com/-meditation-/articles/16290599.html