Java---数据类型与变量

embedded/2024/10/19 17:34:40/

1.字面常量

字面常量就是我们经常所说的常量,常量即在程序运行期间,固定不变的量。且常量是无法改变的,如果我们的代码有改变常量的操作,程序就会报错。

1.1字面常量的分类

字符串常量,整型常量,浮点数常量,字符常量,布尔常量(只有true和false两种),空常量(NULL)。

2.数据类型

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

1,基本数据类型

Java中的基本数据类型由8种,分别为 int,long,short,byte,float,double,char,Boolean。

9707a67bca3d427b9fc7be0f21e8cd9c.png

注意事项

1.无论是在32位系统或者64位系统,int都占用4个字节,long都占用8个字节。相对于C语言,Java程序的可移植性就比较高。

2.整型和浮点型都是有符号类型。

3.整型类型默认为int类型,浮点型默认为double类型。

4.字符串(String)类型属于引用数据类型。

3.变量

在Java程序中,可以改变的量的量就称为变量,而数据类型就是用来定义不同种类的变量。

3.1 整型变量

整型变量有int,long,short,byte四种。

由于与C语言的用法差不多,就不过多介绍了。就说几个注意事项。

1.在定义变量时,一定要给变量赋初值,不然在Java中就会报错。

2.每个整型都有属于自己的包装类,其中int的包装类为Integer,其他整型的包装类都是其首字母变成大写就行了,如long的包装类为Long。

3.每个整型数据类型都有其能够存储的最大值,当我们赋值超过这个最大值时,Java程序会报错。

4.当我们创建一个long类型的变量时,建议在赋值的后面加个l或L,一般加L。如以下代码

public class Demo1 {public static void main(String[] args) {long a=10L;  //在10后面加个L}
}

3.2 浮点型变量

浮点型变量分为float(单精度浮点数)和double(双精度浮点数)两种。

我们在创建float变量的时候,一般在数值后加个f或F。

浮点型的用法和C语言差不多,就不过多介绍了。

介绍一点,我们来看一段代码。

public class Demo1 {public static void main(String[] args) {double a=1.1;System.out.println(a*a);}
}

输出值是不是1.21呢?

运行代码

b2c622d6af7946c9a0e2bd04e7cc9e21.png

发现并不是1.21,而是1.2100000000000002。

原因:小数是不能精确表示每一位的,只能说精确到小数点后几位。 

3.3 字符型变量

char为字符型变量。其包装类为Character。

与C语言不同的是,在Java中,char类型大小占用2个字节。

字符型变量可以存储汉字,一个汉字占用2个字节。

计算机中,字符本质上是一个整数,C语言中使用是ASCII表示字符,Java中使用的是Unicod,表示字符,因此一个字符占两个字节,表示的字符种类更多,包括汉字。

 3.4 布尔型变量

boolean为布尔类型常量。

1.布尔类型的变量只有true和false两种。true表示真,false表示假。

2.在Java中,布尔类型不能与其他类型变量进行转换。

3.在Java中,不存在1表示true,0表示false的说法。

4.布尔类型至今没有明确规定占用多少个字节。

5.布尔类型的包装类为Boolean。

4.类型转换

Java作为一个强类型编程语言,不同类型之间的变量相互赋值,会有严格的校准。

如以下代码

      int a=10;long b=9;a=b;

当我们将一个long类型的变脸赋给int类型的时候,程序会报错,因为long类型的大小大于int,int的的大小无法完整得存储long类型得变量,会造成数据精度得丢失。

4.1 自动类型转换(隐式)

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

e290dcbf1fb044999d79d5960fda1bf5.png

特点:数据范围小得转换为数据范围大的。

aa01949b3dd342cab99831df654342fd.png

4.2 强制类型转换

强制类型转换:当进行操作时,代码需要经过一定的格式处理,不能自动完成。 特点:数据范围大
的到数据范围小。
int a = 10;
long b = 100L;
b = a; // int-->long,数据范围由小到大,隐式转换
a = (int)b; // long-->int, 数据范围由大到小,需要强转,否则编译失败
boolean flag = true;
a = flag; // 编译失败:类型不兼容
flag = a; // 编译失败:类型不兼容
a = d; // 报错,类型不兼容
a = (int)d; // int没有double表示的数据范围大,需要强转,小数点之后全部丢弃
byte b1 = 100; // 100默认为int,没有超过byte范围,隐式转换
byte b2 = (byte)257; // 257默认为int,超过byte范围,需要显示转换,否则报错

需要注意得是,当我们进行强制转换数据类型得时候,在编译方面上讲,它是可以运行的。

但是它是有风险的。看一下代码

public class Demo1 {public static void main(String[] args) {byte a=10;int b=128;a=(byte)b;System.out.println(a);}
}

运行代码

c9cf4754cfa14e2890da55ab22c05e1f.png

 a的值竟然变为-128了,这是为什么呢?

da03d2b4ceb044ceb1e480b4b5751af2.png

由于byte类型的数据类型范围 -128~127,看上图,单我们将128赋值给一个byte类型的变量时,其实就是127+1了,通过上图,127+1就会变成-128了。

5.类型提升

5.1 int与long之间:int会被提升成long

int a = 10;
long b = 20;
int c = a + b; // 编译出错: a + b==》int + long--> long + long 赋值给int时会丢失数据
long d = a + b; // 编译成功:a + b==>int + long--->long + long 赋值给long

5.2 byte与byte的运算

byte a = 10;
byte b = 20;
byte c = a + b;
System.out.println(c);

这段代码是会报错的,原因是:对于short和byte小于4个字节类型的数据进行运算时,会先提升成int,在参与计算。

 6.字符串类型

6.1 字符串拼接

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); // s1+s2表示:将s1和s2进行拼接
}

6.2 int转成String

1f70f7824d744b6eba856e9dac65f14e.png

6.3 String转成int

e62ab887cb14453082877a69b9e5d56e.png


http://www.ppmy.cn/embedded/23961.html

相关文章

Linux中的YUM源仓库和NFS文件共享服务

目录 1.YUM仓库服务 1.1 YUM概述 1.2 准备安装源 1.3 搭建yum本地ftp源仓库 1.4 yum在线源替换方法 1.5 yum的常用操作命令 2.NFS文件共享服务 2.1 NFS(共享存储服务)简介 2.2 NFS服务的实现 2.3 使用NFS发布共享资源 2.4 NSF配置 2.5 如何指…

AI电销机器人系统源码部署之:freeswitch安装Linux

安装 FreeSWITCH(一个开源的电话交换系统)通常需要一些步骤,以下是在 Linux 系统上安装 FreeSWITCH 的基本指南: 准备工作: 确保你有一个运行 Linux 的服务器,并且有 root 或者具有 sudo 权限的用户。确保服…

Python初级笔记6 函数

函数概念 函数是一段具有特定功能的代码的集合。函数的目的主要在于降低编程难度与增加代码复用。一组语句等价于一个函数,,需要使用这组语句的地方直接调用函数名即可。函数的定义也叫函数的声明,定义后的函数不能直接运行需要通过调用 函数…

深度学习和强化学习的区别

深度学习和强化学习是机器学习领域中两个非常重要的研究方向,它们有着不同的应用、原理和目标。虽然这两者可以结合使用(例如在深度强化学习中),但它们的基本概念和方法有着根本的区别。 深度学习(Deep Learning&…

[Java EE] 多线程(五):单例模式与阻塞队列

1. 单例模式 单例模式是校招中最长考的设计模式之一,首先我们来谈一谈什么是设计模式: 设计模式就好像象棋中的棋谱一样,如果红方走了什么样的局势,黑方就有一定地固定地套路,来应对这样的局势,按照固定地套路来,可以保证在该局势下不会吃亏. 软件开发也是同样的道理,有很多…

算法人生(13):从“Scrum”看“PDCA时间管理法”

很多人会好奇为什么“读了很多书,却依然不知道怎么过好这一生”?大家可能都有各自的理解,但正如王阳明先生的“知行合一”所说,“知”要能“行”出来才算“真知”,生活中很多时候知并不一定能行,所以知与行…

关于发布 npm 包镜像库,马上 pnpm 安装报未找到版本的问题?

关于发布 npm 包镜像库,马上 pnpm 安装报未找到版本的问题? 背景:我们在发布共有 npm 包时,npm 官方镜像发布成功,但是淘宝源下载却没有找到刚发布的版本,下面是我遇到问题心路历程 文章目录 关于发布 npm…

【JS】节流与防抖技术

JavaScript: 节流与防抖技术 当用户进行滚动、调整窗口大小或进行频繁的键盘输入时,页面上的某些事件处理器可能会被频繁触发。如果每次事件触发都执行函数,可能会对性能产生显著影响。在这种情况下,我们可以利用节流(Throttle&a…