欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 汽车 > 新车 > 【浅尝Java】变量与数据类型(含隐式类型转换、强制类型转换、整型与字符串互相转换等)

【浅尝Java】变量与数据类型(含隐式类型转换、强制类型转换、整型与字符串互相转换等)

2025/5/5 17:17:49 来源:https://blog.csdn.net/m0_66926829/article/details/147657096  浏览:    关键词:【浅尝Java】变量与数据类型(含隐式类型转换、强制类型转换、整型与字符串互相转换等)

在这里插入图片描述

🍞自我激励:每天努力一点点,技术变化看得见

文章目录

  • 字面常量
  • 数据类型
  • 变量
    • 变量概念
    • 语法格式
    • 整型变量
      • 字节型变量(byte)
      • 短整型变量(short)
      • 整型变量(int)
      • 长整型(long)
    • 浮点型变量
      • 双精度浮点型(double)
      • 单精度浮点型(float)
    • 字符型变量
    • 布尔型变量
    • 类型转换
      • 自动类型转换
      • 强制类型转换
    • 类型提升
  • 字符串类型

字面常量

我们认识每一门语言时,第一个程序就是“Hello World”,如下面程序所示:

public class HelloWorld {public static void main(String[] args) {System.out.println("Hello World");}
}

而上述程序中的System.out.println("Hello World");语句,不均程序何时运行,输出的都是"Hello World",而"Hello World"就是字面常量。

常量的定义是:程序运行期间,固定不变的量。下方程序中,“Jammingpro”、18、3.141592、‘A’、true、false均为常量,并将其称为字面常量。

public class Date {public static void main(String[] args) {System.out.println("Jammingpro");System.out.println(18);System.out.println(3.141592);System.out.println('A');System.out.println(true);System.out.println(false);}
}

字面常量的分类:

  1. 字符串常量:由"“括起来的,比如"123”、“hello”、“小明”;
  2. 整型常量:程序中直接写出的数字(注意没有小数点),比如:100、1000;
  3. 浮点型常量:程序中直接写的小数,比如:3.141592、0.66;
  4. 字符型常量,由’‘单引号括起来的单个字符,比如’A’、‘1’、‘明’;
  5. 布尔型常量:只有true和false两种;
  6. 空常量:null

数据类型

在Java中数据类型主要分为两类:基本数据类型引用数据类型

基本数据类型有四类八种,四类分别是:整型、浮点型、字符型和布尔型。而八种如下表所示:

数据类型关键字内存占用范围
字节型byte1字节-128~127
短整型short2字节-32768~32767
整型int4字节 2 31 2 31 − 1 2^{31}~2^{31}-1 231 2311
长整型long8字节 − 2 63 2 63 − 1 -2^{63}~2^{63}-1 263 2631
单精度浮点型float4字节有范围,一般不关注
双精度浮点型double8字节有范围,一般不关注
字符型char2字节0~65535
布尔型boolean没有明确规定true和false

注意:
● 不论是在16位系统还是32位系统,int都占用4个字节,long都占8个字节
● 整型和浮点型都是带有符号的
● 整型默认为int型,浮点型默认为double型
● 字符串属于引用类型,该类型将于下文介绍

ps:这里也体现了Java代码具备可移植性,因为C语言的long类型在有的系统是4字节存储,有的是8字节存储,导致了long类型的范围不同。

相关拓展:什么是字节
字节是计算机中表示内存空间大小的基本单位。计算机使用二进制表示数据,规定8个二进制位为1个字节。而内存空间各个单位的关系如下所示:
1字节(byte)=8比特(bit)
1KB = 1024byte
1MB = 1024KB
1GB = 1024MB
若小明的电脑内存为8GB,则该内存包含8×1024×1024×1024字节。

变量

变量概念

在程序中,除了上述的始终不变的常量外,还包含了一些经常改变的内容,比如:时间、数学计算结果、分数等。在Java程序中,将这些经常改变的内容成为变量,而数据类型用来定义不同种类的变量。

语法格式

定义变量的语法格式为:

数据类型 变量名 = 初始值;

下面程序,展示如何定义变量,打印变量和修改变量:

public class Main {public static void main(String[] args) {// 定义整型变量countint count = 1;// 打印变量countSystem.out.println(count);// 修改变量数值并打印count = 100;System.out.println(count);}
}

在这里插入图片描述

整型变量

首先介绍整型变量,为什么整型变量分为byte、short、int和long呢?

举一个生活中的例子:小明和小东一个人买了10本书,一个人买了1本书,售货员给了小明大袋子,给了小东小袋子。若给小东一个大袋子,虽然能装下1本书,但有空间上的浪费。

计算机中的存储空间极其宝贵,若1字节能存储下来,我们就没必要给这个变量分配4字节。这就是为什么整型分为4个种类了。

在这里插入图片描述

字节型变量(byte)

首先介绍byte类型,它可以占据1字节的空间,它可以存储[-128, 127]区间的数据。下面程序展示了,如何定义byte类型,并打印byte类型所能存储的最大值和最小值。

public class Main {public static void main(String[] args) {// 定义byte类型的变量byte b = 2;System.out.println(b);// 打印byte类型的最大值和最小值System.out.println(Byte.MIN_VALUE);System.out.println(Byte.MAX_VALUE);}
}

ps:这里的Byte成为包装类,将于后续文章介绍,这里只要了解它.MAX_VALUE.MIN_VALUE的用法即可。

短整型变量(short)

short类型占据2个字节,它可以存储[-32768,32767]区间的数据,它的包装类为Short。下方代码演示了定义short类型变量,并打印其可以存储的最大值和最小值。

public class Main {public static void main(String[] args) {// 定义short类型的变量short sh = 2;System.out.println(sh);// 打印short类型的最大值和最小值System.out.println(Short.MIN_VALUE);System.out.println(Short.MAX_VALUE);}
}

在这里插入图片描述

若你此前学过类似于C、C++语言,它们支持定义变量的时候,不给它们初始值。但Java要求,在定义变量时必须给出初始值,否则会报错:

public class Main {public static void main(String[] args) {// 定义变量,没有初始化short sh;System.out.println(sh);}
}

在这里插入图片描述

在这里插入图片描述

注意:上述介绍的byte和short的范围都比较小,使用的情况也比较少,使用时注意不要超出范围。不知道初始化为什么数值时,可以将变量初始化为0。

整型变量(int)

int类型是使用最广泛的类型,它占据4个字节存储范围为[ − 2 31 -2^{31} 231, 2 31 − 1 2^{31}-1 2311]包装类为Integer。下面代码演示了如何定义int类型变量,并打印了它的存储范围。

public class Main {public static void main(String[] args) {// 定义int类型的变量int a = 2;System.out.println(a);// 打印int类型的最大值和最小值System.out.println(Integer.MIN_VALUE);System.out.println(Integer.MAX_VALUE);}
}

在这里插入图片描述

长整型(long)

long的存储范围大于int,它占据8个字节可以存储[ − 2 63 -2^{63} 263, 2 63 − 1 2^{63}-1 2631]区间的数据,它的包装类为Long。下面代码演示了如何定义long类型,并打印其存储范围。

public class Main {public static void main(String[] args) {// 定义long类型的变量long a = 2L;System.out.println(a);// 打印long类型的最大值和最小值System.out.println(Long.MIN_VALUE);System.out.println(Long.MAX_VALUE);}
}

注意:在初始化long类型的数值时,要在数值后面加上l(小写L)或者L。由于小写L和数值1、大写I很相似,推荐使用大写L。

上面代码如果去掉数值后面的L,将其改为long a = 2;并不会出错。但如果初始化的数值大于int表示的最大数值2147483647,即若将long a = 2147483648;则程序会出错,因而在long类型初始化时,要在数值后面加L。

public class Main {public static void main(String[] args) {// 定义long类型的变量long a = 2147483678;System.out.println(a);// 打印long类型的最大值和最小值System.out.println(Long.MIN_VALUE);System.out.println(Long.MAX_VALUE);}
}

在这里插入图片描述

浮点型变量

双精度浮点型(double)

Java中存储小数时,使用最广泛的是double类型。double占据8个字节,它的包装类为Double。但Double的存储形式与整型不同,表示范围不用使用2的几次方来计算,关于它的范围可以可以了解IEEE 754标准。

public class Main {public static void main(String[] args) {// 定义double类型变量double num = 3.1415926;System.out.println(num);// double的存储范围System.out.println(Double.MIN_VALUE);System.out.println(Double.MAX_VALUE);}
}

注意:这里的Double.MIN_VALUE打印的是double能存储的最小正数,Double.MAX_VALUE打印的是double能存储的最大整数。

下面看一段程序,并猜测其执行结果:

public class Main {public static void main(String[] args) {int num1 = 5;int num2 = 2;System.out.println(num1 / num2);}
}

在这里插入图片描述
注意:整型和整型的计算结果还是整型,会舍去小数点后面的数值,因而上述程序的结果为2。

再看另一个程序,并猜测其结果:

public class Main {public static void main(String[] args) {double num1 = 1.1;double num2 = 2.2;System.out.println(num1 * num2);}
}

在这里插入图片描述
注意:浮点数的存储空间有限,因而它精度也有限,它的计算结果趋近于真实值,但存在一定误差。

单精度浮点型(float)

float的包装类为Float占据的空间仅4字节,因而它的表示范围和精度小于double,其他特性与double相同。由于float的精度更低,因而使用率也比较低。

ps:java规定,float初始值后面需要加字母f或者F。

public class Main {public static void main(String[] args) {float num1 = 1.1f;float num2 = 2.2f;System.out.println(num1);System.out.println(num2);System.out.println(num1 * num2);}
}

在这里插入图片描述

字符型变量

Java使用char类型来存储字符,并使用单引号+单个字符的形式表示字符的字面常量,char的包装类为Character

public class Main {public static void main(String[] args) {char c1 = 'A';char c2 = '好';System.out.println(c1);System.out.println(c2);}
}

在这里插入图片描述

注意:若你此前学习过C、C++等语言,它们并支持使用单个char字符存储中文。这是由于C/C++使用的ACSII编码表示字符,占据1个字节。而Java使用Unicode编码表示字符,因此一个字符占据两个字节。因而Java能够表示出了中英外的多种字符。

若你直接使用cmd命令行执行javac命令时出现如下错误,则需要在执行javac时加上-encoding UTF-8选项。
在这里插入图片描述

布尔型变量

生活中我们有很多需要真和假两种数值的情况,例如:A说“小明中了1个亿的票”,B说“真的假的?”,A说“假的”。
在这里插入图片描述
表示真和假的值成为布尔值,使用boolean表示,它只有true和false两种值,true表示真,false表示假。boolean的包装类为Boolean

public class Main {public static void main(String[] args) {boolean flag1 = true;boolean flag2 = false;System.out.println(flag1);System.out.println(flag2);}
}

在这里插入图片描述
ps:java虚拟机规范中,并没有明确规定boolean占几个字节,也没有专门用来处理boolean的字节码指令。在Oracle公司的虚拟机实现中,boolean占1个字节。

注意:Java的boolean类型不能和int互相转换,不存在1表示true,0表示false的用法。

类型转换

Java是一种强类型的编程语言,当不同类型的变量相互赋值的时候,会有严格的校验。当参与运算的数据类型不一致时,就需要类型转换。Java中的类型转换分为:自动类型转换(隐式类型转换)和强制类型类型转换(显示类型转换)

自动类型转换

自动类型转换表现为:代码不需要经过任何处理,在代码编译时,编译器会自动进行处理

特点是:数据范围小的转换为数据范围大的,会自动进行转换。

下面代码演示了自动类型转换,int类型的表示范围小于long类型,因而可以直接赋值。

public class Main {public static void main(String[] args) {int num1 = 123456789;long num2 = num1;System.out.println(num1);System.out.println(num2);}
}

在这里插入图片描述
若将上面代码反过来,将long类型赋值给int,则会出错。


public class Main {public static void main(String[] args) {long num1 = 123456789;int num2 = num1;// 出错!!System.out.println(num1);System.out.println(num2);}
}

在这里插入图片描述
在浮点型中,双精度浮点型的范围大于单精度浮点型,因而double赋值给float会出错,而float赋值给double会进行隐式类型转换。


public class Main {public static void main(String[] args) {float num1 = 2.2f;double num2 = num1; // 隐式类型转换(OK)System.out.println(num1);System.out.println(num2);float num3 = num2; // 错误,ERROR!!System.out.println(num3);}
}

在这里插入图片描述

在编译器识别时,整数默认识别为int类型,只要整数不超过byte类型可以直接赋值为byte变量,但若超过byte类型则会报java: 不兼容的类型: 从int转换到byte可能会有损失,short同理。而小数编译器默认识别为double类型,需要在小数后面加上f或F,以告诉编译器其为float类型。

强制类型转换

当大范围类型转换为小范围类型,或者高精度类型转换为小精度类型,无法自动完成(无法自动类型转换),则需要使用强制类型转换。

特点:数据范围大的到数据范围小的

当long转为int,将double转为float,将int转为byte等都需要强制类型转换。代码如下所示:

public class Main {public static void main(String[] args) {long num1 = 123456;int num2 = (int)num1;System.out.println(num2);float num3 = 1.23f;double num4 = (double)num3;System.out.println(num4);byte num5 = 123;int num6 = (int)num5;System.out.println(num6);}
}

在这里插入图片描述
但不相干类型无法相互转换,例如:boolean转换为int。

public class Main {public static void main(String[] args) {boolean flag = true;int num1 = (int)flag;}
}

在这里插入图片描述

注意:
● 不同数值类型的变量转换时,表示范围小的类型能隐式转换为范围大的类型;
● 若需要将表示范围大的转换为表示范围小的,需要强制类型转换,但可能存在精度丢失;
● 强制类型转换不一定能成功,不相干的类型不能相互转换。

注意:由于编译器会默认将整数识别为int类型,若小于byte范围可以直接赋值给byte变量,否则需要强制类型转换。编译器默认将小数识别为double,需要在小数后面加f或F才能识别为float,否则也需要强制类型转换。

public class Main {public static void main(String[] args) {byte num1 = (byte)123456;System.out.println(num1);float num2 = (float)3.1415926;System.out.println(num2);}
}

在这里插入图片描述

类型提升

不同类型的数据之间计算时,小范围数据类型会被自动提升为大的数据类型。

  1. int和long之间:int会提升为long
public class Main {public static void main(String[] args) {int num1 = 123;long num2 = 123;long sum1 = num1 + num2;	// OKint sum2 = num1 + num2;		// ERRORSystem.out.println(sum1);System.out.println(sum2);}
}

在这里插入图片描述

  1. 范围小于int的类型:都会提升为int

代码示例1:

public class Main {public static void main(String[] args) {byte num1 = 1;byte num2 = 2;byte sum = num1 + num2;System.out.println(sum);}
}

在这里插入图片描述

代码示例2:

public class Main {public static void main(String[] args) {short num1 = 1;short num2 = 2;short sum = num1 + num2;System.out.println(sum);}
}

在这里插入图片描述

代码示例3:

public class Main {public static void main(String[] args) {short num1 = 1;byte num2 = 2;short sum = num1 + num2;System.out.println(sum);}
}

在这里插入图片描述

总结:
● 不同类型的数据混合运算,范围小的会被提升为范围大的;
● 对于short,byte这种比4个字节小的类型,会提升成4个字节的int,再计算;

字符串类型

在Java中存储字符串类型时,将变量定义为String即可,而String属于抽象数据类型,并不属于基本数据类型。

public class Main {public static void main(String[] args) {// 定义String类型的变量String s1 = "Jammingpro";String s2 = " hello world";System.out.println(s1);System.out.println(s2);System.out.println(s1 + s2);// 将s1和s2拼接在一起}
}

在这里插入图片描述

在一些场景下,我们需要实现字符串和整型数据之间的转换:

  1. int转为String

下方代码演示了int转为String的两种方法:

public class Main {public static void main(String[] args) {// 定义int类型数据int num = 123456;// 转换为String类型方法1String s1 = String.valueOf(num);System.out.println(s1);// 转换为String类型方法2String s2 = num + "";System.out.println(s2);}
}
  1. String转为int
public class Main {public static void main(String[] args) {// 定义String类型变量String s = "123456";// 转换为int类型int num = Integer.parseInt(s);System.out.println(num);}
}

nice,bro!我写完了这篇文章了,你也看完这篇文章了!一起奖励自己一道力扣题吧~

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词