这是我参与2022首次更文挑战的第2天,活动详情查看:2022首次更文挑战 | 创作学习持续成长,夺宝闯关赢大奖 - 掘金 (juejin.cn)
(二)变量
1.变量的基本概念
变量的概念、结构及作用
- 概念:内存中的一个存储区域,该区域中的数据可以在同一类型范围内不断变化,变量是程序中最基本的存储单元
- 结构:包括变量类型、变量名和存储的值
- 作用:用于在内存中存储数据
使用变量注意
- Java中的每个变量必须先声明后使用
- 使用变量名来访问这个区域内的数据
- 变量的作用域只在其定义所在的一对{}内
- 变量只有在其作用域内才有效
- 同一个作用域内不能定义同名的变量
2.变量的分类
按数据类型
按声明的位置的不同
- 在方法体外,类体内声明的变量称为成员变量;
- 在方法体内部声明的变量称为局部变量;
(局部变量除形参外,需显式初始化)
3.变量类型
(1)整数类型
byte,short,int,long
// 1.整型:byte(1字节=8bit,-128~127)\short(2字节)\int(4字节)\long(8字节)
byte b1=12;
byte b2=-128;
//b2 = 128;//编译失败
System.out.println(b1);
System.out.println(b2);
//声明long类型变量,必须以“l”或“L”结尾
//定义整型变量通常用int型
short s1=128;
int i1=1234;
long l1=34111233;
System.out.println("l1");
(2)浮点类型
float,double
//2.浮点型:float(4字节),double(8字节)
double d1=123.3;
System.out.println(d1+1);
float f1=12.3f;
//定义float类型变量时,变量要以“f”或“F”结尾
System.out.println(f1);
//通常定义浮点型变量时使用double
(3)字符类型
char
- char型表示通常意义上的“字符”(2字节)
- char型还可表示转义字符
- char类型是可以进行运算的。因为它都对应有Unicode码
常见的编码类型:ASCLL\Unicode\UTF-8
//3.字符型:char(1字符=2字节)
//声明字符型变量通常使用一对‘’,内部只能写一个字符
char c1='a';
String hhh1="abc";
System.out.println(c1);
System.out.println(hhh1);
char c2='1';
char c3='中';
char c4='*';
System.out.println(c2);
System.out.println(c3);
System.out.println(c4);
//char表示方式:1)声明一个字符,2)转义字符(\n,\t等),3)直接使用Unicode值来表示字符型常量
char c5='\t';
System.out.print("hello"+c5);
System.out.println("world");
char c6='\u0043';//Unicode编码集
System.out.println(c6);
(4)布尔类型
boolean:只允许取true、false
//4.布尔型:boolean
//只能取两个值中的一个,true,false
//通常在条件判断或循环结构中使用
boolean bb1=true;
System.out.println(bb1);
boolean isMarried = true;
if(isMarried){
System.out.println("你就不能参加单身派对了\n123");//转义字符用一个反斜线\
}else{
System.out.println("你可以参加单身派对");
}
4.基本数据类型转换
这里讨论除布尔外的其中基本数据类型的运算
(1)自动类型转换
-
byte-->short-->int-->long-->float-->double 特别的:byte,short,char三者做运算时全部提升为int short与char做运算提升为int byte与char做运算提升为int
-
当容量小的数据类型的变量与容量大的数据类型的变量做运算时,结果自动提升为容量大的数据类型 此时的容量大小指的是表示数的范围的大小,比如float的容量要大于long的容量
class VariableTest2{ public static void main(String[] args){ byte b1 = 2; int i1 = 129; //byte b2 = b1 + i1;//编译不通过,从int转换到byte可能有损失 int i2 = b1 + i1; long l1 = b1 + i1; System.out.println(i2); System.out.println(l1); float f1 = b1 + i1; System.out.println(f1); double d1 = b1 + i1; System.out.println(d1); short s1 = 123; double d2 = s1; System.out.println(d2); //************特别的****************** char c1 = 'a';//97 int i3 = 10; int i4 = c1 + i3; System.out.println(i4); short s2 = 10; int s3 = c1 + s2; System.out.println(s3); byte b2 =1; int s4 = c1 +b2; System.out.println(s4); //******************************** } }
(2)强制类型转换
-
自动类型提升的逆运算
-
需要使用强转符()
-
强制类型转换可能导致精度损失
-
字符串不能直接转换为基本类型,但通过基本类型对应的包装类则可 以实现把字符串转换成基本类型。 如: String a = “43”; int i = Integer.parseInt(a);
class VariableTest3{ public static void main(String[] args){ double d1 = 12.9; int i1 = (int)d1;//double强制转为int,不同于四舍五入,截断操作损失精度 System.out.println(i1); long l1 = 123; short s2 = (short)l1;//没有精度损失 //精度损失举例2 int i2 = 128; byte b = (byte)i2; System.out.println(b);//-128 } }
(3)默认情况
- 整型默认为int
- 浮点型默认为double
class VariableTest4{
public static void main(String[] args){
//1.编码情况1
long l = 123213;//整型默认为int
System.out.println(l);
long l1 = 213333333333333333l;//不加l被认定为int
System.out.println(l1);
float f1 = 12.3f;//浮点型默认为double
System.out.println(f1);
//2.编码情况2
byte b = 12;
//byte b1 = b + 1;//整型常量默认为int,浮点型常量默认为double
//float f1 = b + 12.3;//编译失败
}
}
5.字符串类型String
- String属于引用数据类型,翻译为 字符串
- 声明String类型变量时,使用一对“”
- String可以和8种基本数据类型变量做运算,且运算只能是连接运算 “+”
- 运算结果仍然是String类型
class StringTest{
public static void main(String[] args){
String s1 = "Hello World";
System.out.println(s1);
String s2 = "a";
String s3 = "";//String类型可以为空
//char c = '';//编译错误:char类型不能为空,有且只有一个
System.out.println(s3);
//*********************
int num = 1001;
String numStr = "学号:";
String info = numStr + num;//连接运算
System.out.println(info);
boolean b1 = true;
String info1 = info + b1;
System.out.println(info1);
//练习一
char c = 'a';//a:97 A:65
int num1 = 10;
String str = "hello";
System.out.println(c + num1 + str);//107hello
System.out.println(c + str + num1);//ahello10
System.out.println(c + (num1 + str));//a10hello
System.out.println((c + num1) + str);//107hello
System.out.println(str + num1 + c);//hello10a
//练习二
//* *
char c1 = '*';
System.out.println(c1+'\t'+c1);
System.out.println('*' + '\t' + '*');//char对应ascll自动转换为int
System.out.println('*' + "\t" + '*');//“\t”表示String
System.out.println("*" + '\t' + '*');
System.out.println('*' + ('\t' + '*'));
}
}