提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
初识Java之数据类型与变量
1.字面常量
📓常量字符串即程序运行期间,固定不变的量称为常量,例如:1个礼拜是7天,一年是12个月。
public class test {
public static void main(String[] args) {
System.out.println("hello world");
System.out.println(100);
System.out.println(3.14);
System.out.println('A');
System.out.println(true);
System.out.println(false);
}
}//其中:100 3.14 ‘A’ true/false都是常量,将其称为字面常量
- 字符串常量是用"“括起来的,比如"23456”, “hello”, “侬好”。
- 整型常量:程序直接写出来的数字(是没有小数点的),比如:100,231
- 浮点数常量:程序中直接写的小数,比如:3.14,5.22
- 字符常量:由单引号括起来的单个字符,比如:‘A’, ‘1’
- 布尔常量:只有两种结果,true或者false
📔注意:在java中,字符串,整型,浮点型,字符型以及布尔型都称为数据类型
2.数据类型
📒在java中数据类型主要分为两类:基本数据类型和引用数据类型
📕基本数据类型又分为四类八种
- 四类:整型,浮点型,字符型以及布尔型
- 八种
📕注意:
无论是16位还是32位操作系统,int都占4个字节,long占8个字节(说明java的移植性很强)
整型和浮点型都是带有符号的
整型默认int,浮点型默认double
字符串属于引用类型
我们拿int来举例(下图)
字节是计算机中表示空间大小的基本单位,常见的换算如下图🖊
3.变量
变量的概念:
地球无时无刻不在转动,一切都是在改变的,所以在Java中对于经常改变的内容就称之为变量。我们上面提到的数据类型就是用于定义不同种类的变量的。(变量分为基本变量和引用变量,我们先介绍基本变量)语法格式为:数据类型 变量名=初始值
3.1整型变量
💼int long short
//整型变量定义方式一
int a=10;
System.out.println(a);
//整型变量定义方式二
int b;
b=10;
System.out.println(b);
//整型变量定义方式三
int c;
System.out.println(c);
c=100;//这种定义方式是错误的,会出现Variable 'c' might not have been initialized报错,意思就是没有对进行初始化
1.整型无论在任何系统下都占4个字节
2.整型的范围是-2^31~2^31-1
3.Integer是int的包装类
int a=10;//定义一个值为10的整型变量
long b=20L;//为了区分整型和长整型,一般在long类型变量后加上L
1.长整型变量需要在初始值后加上L
2.长整型无论在任何系统下都占8个字节
3.长整型的范围是-2^63 ~ 2^63-1
4.长整型的包装类是Long
short a=10;
System.out.println(a);//10
1.短整型在任何系统下都是占2个字节
2.短整型的表示范围是-32768 ~ 32767
3.使用时注意不要超过范围
4.短整型的包装类型是Short
3.2字节变量
🧰byte
byte a=10;
System.out.println(a);
1.byte字节型在任何系统下都是占1字节
2.byte的范围是:-128 ~ 127
3.byte的包装类型是Byte
3.3浮点型变量
🧳double and float
int i=1;
int j=2;
System.out.println(i/j);//结果会是0.5吗?
//不会,在java中,整数除整数会直接舍弃掉小数点后面的部分,所以这个答案是0
正确的做法是需要将被除数和除数都以小数的形式去执行
double i=1.0;
double j=2.0;
ystem.out.println(i/j);
1.double字节型在任何系统下都是占8字节
2.double的范围是:很大,一般不关注
3.double的包装类型是Double
float num=2.1f;
float qwe=3.7F;
System.out.println(num);
System.out.println(qwe);
1.float字节型在任何系统下都是占4字节
2.float的范围是:一般不关注
3.float的包装类型是Float
4.我们在提到浮点型时,一般直接考虑使用double,很少使用float
3.4字符型变量
📪char
char c1='A';
char c2='a';
System.out.println(c1);
System.out.println(c2);
int c3='A';
int c4='a';
System.out.println(c3);
System.out.println(c4);
char c5='哈';
System.out.println(c5);
1.char 可以存放整型或者字符以及汉字
2.大小写ascll码值相差32,在java中采用的是Unicode用于表示字符,所以一个字符占用两个字节
3.char类型在任何系统下占用2个字节
4.其范围是0 ~ 65535
3.5布尔类型变量
🧳boolean
boolean a=true;
System.out.println(a);
System.out.println("=================");//分割线
boolean b=false;
System.out.println(b);
1.boolean类型变量只有两种结果,true表示真,false表示假
2.并没有明确规定boolean占用几个字节,甲骨文公司的虚拟机实现中,boolean占用1个字节
3.boolean类型不能和int相互转换,不存在1表示true,0表示false这种说法
4.boolean的包装类为Boolean
4.类型转换
public static void main(String[] args) {
int a=10;
long b=100L;
b=a;//可以
a=b;//不可以
}
> a是整型,赋给长整型b,b可以接受,因为a的范围小,b的范围大,将a赋值给b时,会自动将a提升到long类型,然后赋值。
> 正因如此,long的范围比int范围大,会有数据丢失的风险,所以编译器直接报错
>
> 所以根据转换的情况,Java中有两种类型转换,分为自动类型转换和强制类型转换
4.1自动类型转换(隐式)
🧃自动类转换:范围小的转给范围大的OK,范围大的转给范围小的,错误。
🥤特点:数据范围小的转为数据范围大的时会自动进行
public static void main(String[] args) {
int a=100;
long b=10L;
b=a;//编译器会自动将a提升到long类型,然后赋值
// a=b;//long的范围大,直接赋值给int类型,会出现数据丢失的情况
float f=3.14f;
double d=5.12;
d=f;//编译器会转换为double,然后进行赋值
// f=d;//double的范围大,直接赋值给float类型,会出现数据丢失的情况
byte b1=100;
// byte b2=257;//byte的范围是-128~127,257已经超过byte的范围了,所以会直接报错
}
4.2强制类型转换(显式)
🍵强制类型转换:当进行操的时候,代码需要经过一定的格式处理,不能自动完成。
🧋特点:数据范围大的到数据范围小的
👉🏿代码如下(示例):
public class Main {
public static void main(String[] args) {
int a = 10;
long b = 100L;
b=a;//int-->long,数据范围小的到数据范围大的,隐式转换
a=(int)b;//long-->int数据范围由大到小,需要强制类型转换,否则会出现编译错误
float f=3.14F;
double d=5.5;
d=f;//float-->double,数据范围由小到大,隐式转换
f=(float)d;//double-->float, 数据范围由大到小,需要强转,否则编译失败
a=d;//类型不兼容,报错
a=(int)d;//int没有double表示的范围大,需要强转,小数点之后全部抛弃
byte b1=100;//这里100会被默认为int,没有超出byte的范围,隐式转换
byte b2=(byte)257//257默认为int,超出了byte的范围,需要显式抓换,否则就会报错
boolean flag=true;
a=flag;//编译失败,类型不兼容
flag=a;//编译失败,类型不兼容
}
}
🤖注意事项
1.不同数字类型的变量之间赋值,表示范围小的类型能隐式转换成范围较大的类型
2.如果需要把范围大的类型赋给范围小的,需要强制类型转换,但是会出现精度丢失的情况
3.将一个字面值常量进行赋值的时候,Java会自动针对数字范围检查
4.强制类型转换不一定能成功,不想干的类型不能互相转换,例如boolean和int
4.3类型提升
🦖不同类型的数据之间进行运算,类型数据小的会被提升到数据类型大的
🐉整型和整型计算
public static void main(String[] args) {
int a=10;
long b=20;
int c=a+b;//报错,因为b是长整型,直接赋给int类型会丢失数据
long d=a+b;//编译成功,因为长整型d可以接收int类型
}
🐲byte和byte计算
byte a=10;
byte b=20;
byte c=a+b;
System.out.println(c);
----
不是byte和byte之间进行运算吗,关int什么事?🤔
答:这是因为计算的CPU都是按照4个字节为单位从内存中读写数据,例如byte和short这种低于4个字节的类型,会先提升到int。a+b会将a和b提升为int,再进行计算,得到的结果也是int,这就是为什么赋给c,就会出现报错。
正确的做法👇🏾
byte a=10;
byte b=20;
byte d=(byte)(a+b);
System.out.println(d);
🧠类型提升的小结:
1.不同类型的数据混合运算,范围小的会提升成范围大的
2.对于short,byte这种比4个字节小的类型,会先提升成4个字节的int,再进行运算
在上面我们不断提到了包装类这一个知识点。什么是包装类呢?🤔
答:为了让基本数据类型也具备对象的特性, Java 为每个基本数据类型都提供了一个包装类,这样我们就可以像操作对象那样来操作基本数据类型。
🗣目前只需要记住有包装类这个概念,在后续知识点我们会持续跟进这一知识点
补充
🦎 String类定义字符串
public static void main(String[] args) {
String s1="hello";
String s2="world";
System.out.println(s1);
System.out.println(s2);
System.out.println(s1+s2);
}
🤥需要注意的是在java中:字符串+其他类型等于字符串
我们将上述的代码换一种方式输出出来
int a=1;
int b=2;
System.out.println("a = "+a);
System.out.println("b = "+b);
System.out.println("a+b="+a+b);
System.out.println("a+b="+(a+b));
大家注意看a+b的结果,a+b应该是等于3的,怎么第三行打印的会是12呢,这是因为在java中,'+'就相当于一个拼接符号,所以就输出12,只需要加上一个括号即可。
😈int转String
public static void main(String[] args) {
int x=100;
String str1=x+" ";
System.out.println(str1);//方法1
System.out.println("=================华丽的分割线");
String str2=String.valueOf(x);//方法2
System.out.println(str2);
}
😈String转int
String str1="100";
int num=Integer.parseInt(str1);
System.out.println(num);
System.out.println("----------------华丽的分割线");
String str2="3435";
int qwe=Integer.parseInt(str2);
System.out.println(qwe);