第02章 变量

news2025/7/10 12:13:42

变量介绍

定义

定义:变量是程序的基本组成单位,变(变化)量(值)

变量有三个基本要素:数据类型 + 变量名称 + 值

变量相当于内存中的一个数据存储空间的表示,可以把变量看作是一个房间的门牌号,通过门牌号我们可以找到房间,即通过变量名访问到变量值。

变量快速入门

1、变量表示内存中的一个存储区域【不同的变量,类型不同,占用的空间大小不同,比如int:4字节,double:8字节】

2、变量相当于内存中一个数据存储空间的表示,该空间有自己的名称[变量名]和类型[数据类型]。

3、变量必须先声明,然后再使用。

4、该空间的 数据\值 可以在同一类型范围内不断变化。

5、变量在同一作用域内不能重名。

6、变量 = 变量名 + 值 + 数据类型。

+号的使用

  • 当左右两边都是数值型的时候,则为加法运算

  • 当左右两边有一方为字符串时,则为拼接运算

总结: 运算顺序为从左到右。

public class Test{
	public static void main(String[] args){
		System.out.println(100 + 98);  //  198
		System.out.println(100 + "98");  //  10098
		System.out.println(100 + 3 + "hello");  // 103hello
		System.out.println("hello" + 100 + 3);  // hello1003
	}
}

数据类型

定义

每一种数据都被定义了明确的数据类型,不同的数据类型在内存中分配了不同大小的内存空间「字节」。
在这里插入图片描述

总结:

1、Java数据类型分为两大数据类型:基本数据类型 和 引用数据类型

2、基本数据类型有8种:

  • 数值型:byte、short、int、 long、float、 double

  • 字符型:char

  • 布尔型: Boolean[true/false]

3、引用类型:类,接口,数组

整数类型

基本介绍

在这里插入图片描述

byte n1 = 10;    // 1 字节
short n2 = 10;	// 2 字节
int n3 = 10;  // 4字节
long n4 = 10; // 8字节

以上变量的值虽然相同,但占用空间不同,而且值的取值范围不同

整数类型的使用细节

1、Java各整数类型有固定的范围和字段长度,不受具体操作系统的影响,目的为了保证java程序的可移植性。

2、Java的整型常量默认为 Int 型,声明 long型 常量需在值后面加’l’ 或‘L’

3、Java程序中变量经常默认声明为int类型,除非数据值非常大,超出Int的取值范围,才会考虑使用long。

4、bit: 计算机中的最小存储单位。byte:计算机中基本存储单元。 1 byte = 8bit

浮点类型

基本介绍

在这里插入图片描述
1、浮点数在机器中的存放形式为:浮点数 = 符号位 + 指数位 + 尾数位

2、尾数部分可能丢失,造成精度损失(小数都是近似值)。

使用细节

1、与整数类型相似,Java浮点类型也有固定的范围和字段长度,不受具体操作系统的影响。

2、Java的浮点型常量默认为 double,当声明 float型 常量时,需添加 ‘F’ 或 ‘f’。

3、浮点数常量的两种表现形式: 十进制 和 科学计数法 形式

4、通常情况下使用 double类型。

5、浮点数在判断数值相等时的判断陷阱。

如果是直接查询得到的小数或者赋值的小数,是可以进行相等判断的。

public class FloatDetail{
	public static void main(String[] args) {
		//  Java 的浮点型常量默认为 Double类型, 声明float 类型时, 需加 f 或 F
		// float num1 = 1.1;  // 对不对? ❌
		float num2 = 1.1F;  // 对
		double num3 = 1.1; // 对
		double num4 = 1.1f;  // 注意,大字节包含小字节, 没问题。对

		// 十进制数形式, 如 5.12.    512.0f    .512 
		double num5 = 5.12;
		double num6 = 5.0f;
		double num7 = .12; // 0.12


		// 科学技术法形式, 如 5.12e2 [5.12的10的2次方]   5.12e-2  [5.12 / 10 / 10]
		System.out.println(5.12e2); // 512.0
		System.out.println(5.12e-2); // 0.0512

		// 浮点数使用陷阱, 2.7 和  8.1 / 3 的比较
		double num8 = 2.7;
		double num9 = 8.1 / 3;
		System.out.println(num9);    // 输出的为接近2.7的小数,而不是2.7
		// 错误写法
		if (num8 == num9){
			System.out.println("相等");  // 不会输出结果
		}
		// 正确写法
		if (Math.abs(num9 - num8) < 0.000001){
			System.out.println("差值非常小,满足规定的精度,认为相等");
		}
		System.out.println("求差的绝对值" + Math.abs(num9 - num8));
	}

}

Java API文档

1、API(Application Programming Interface,应用程序编程接口)

中文在线文档:

码工具 - 代码在线工具箱

2、Java语言提供了大量的基础类,因此Oracle公司为这些基础类提供了相应的API文档,用于告诉开发者如何使用这些类以及类里包含的方法

字符类型

基本介绍

字符类型可以表示单个字符,char是两个字节,可以存放汉字。

格式: char c1 = ‘张’ 注意使用单引号。

char c1 = '\n'; // 输出换行
char c2 = 97;  // 97数字编码对应的字符

使用细节

1、字符使用单引号

2、在Java中,char的本质是一个整数,输出的为Unicode码中对应的字符。

// 在Java中,char的本质是一个整数,输出的为Unicode码中对应的字符。
char c1 = 97;
System.out.println(c1);

char c2 = 'a';
System.out.println((int)c2); // 输出‘a’对应的数字 97

System.out.println('a' + 10); // 107

在这里插入图片描述

3、 char是可以参加运算的。【记住】

System.out.println('a' + 10);   // 107  类型为:class java.lang.Integer

测试

char c5 = 'b' + 1;
System.out.println((int)c5);   // 输出 99
System.out.println(c5);   // 输出值为class java.lang.Character 类型,char 99在Unicode中对应的字符,即输出为 ‘c’

编码

ASCII:由美国人设计,仅有英文单词和一些其他的常用符号,用一个字节表示,一个字节可以表示256个字符,但美国不需要这么多字符,所以最后设计了128个。

Unicode:不论是汉字还是字母,均占用两个字节,这样就造成空间的浪费。【前128个与ASCII码相同。】

utf-8: 汉字用3个字节存储 [汉字比较多,所以使用3个字节才能尽可能多的表示汉字] , 1个字节表示字母

gbk:字母1个字节,汉字2个字节 gbk表示的汉字数量不如utf-8多。

big5码:繁体中文,台湾,香港, 当内容为繁体中文时,转为utf-8会报错,因为在utf-8中找不到对应的字符

utf8和utf8mb4的区别_骑台风走的博客-CSDN博客_utf8mb4和utf8有什么区别

布尔类型

基本介绍

1、布尔类型数据只允许取值 true 和 false , 无null

2、boolean 类型占 1个字节

3、boolean 类型 适于逻辑运算,一般用于程序流程控制。

注意

不可以 0 或者 非0 的整数代替false和true

数据类型转换

自动数据类型转换

定义:

当java程序在进行赋值或者运算是,精度小的类型自动转换为精度大的数据类型。这个就是自动类型转换。

数据类型按照精度(容量)大小排序为:

char < int < long < float < double

byte < short < int < long < float < double

int a = 'c';  // 对    char --> int
double d = 80; // 对,输出为80.0   int -- double

注意事项【重点】

1、当多种类型的数据进行混合运算时,系统首先自动将所有数据转换成容量最大的那种数据类型,然后再进行计算。

2、当把精度大的数据类型赋值给精度小的数据类型时,就会报错,反之则类型自动转换。

3、(byte, short) 和 char 之间不会进行自动转换。

3、(byte, short) 和 char 之间不会进行自动转换。

// 当把数据赋值给 byte 时,先判断该数值是否在 byte 范围内,如果在范围内则可以赋值
// 当使用变量进行赋值时,则首先进行类型判断。
byte b1 = 10;  // b1 为 byte 类型,而不是默认的 int 类型。
char c1 = b1; // 报错,byte,char 不能自动转为char。

4、byte,short,char 三者间进行运算时首先将类型转换为int

byte b2 = 1;
byte b3 = 2;
short s1 = 1;
short s2 = b2 + s1;   //错误。因为 b2 + s1 => int ,int转为short会有内存损失。
byte b4 = b2 + b3;  // 运算结果为int, 报错❌

5、boolean 不参与类型的自动转换

6、自动提升原则,表达式结果的类型自动提升为操作数中的最大类型

byte b4 = 1;
short s3 = 100;
int num200 = 200;
double num300 = 1.1;
double num500 = b4 + s3 + num200 + num300;  //输出为最大的类型double类型,。

强制类型转换

介绍

自动类型转换的逆过程,将容量大的数据类型转换为容量小的数据类型。使用时要加上强制类型转换符(), 但注意,可能造成精度降低或溢出,格外要注意。

int i = (int)1.9;  // 1 由double转为int 
int j = 100;
byte b1 = (byte)j; // 100 类型为:byte
int d = 2000;
byte b2 = (byte)d; // 输出值为-48, 数据溢出

细节

1、强转符号只针对于最近的操作数有效,往往会使用小括号提升优先级

int y = (int)(10 * 3 + 6 * 1.5); // 通过使用小括号提升优先级   double -> int

2、char类型可以保存int的常量值,但不能保存int的变量值,需要进行强转。

char c1 = 100; // 没问题
int m = 100; // 没问题
char c2 = m;   // 错误,不能保存int变量值,相当于int类型赋值给char类型,可能数据丢失。
char c3 = (char)m; // 强制转换,没问题

测试

在这里插入图片描述

基本数据类型和String类型的转换

转换方法

基本类型转String类型:将基本类型的值 + “” 即可。

String类型转基本数据类型: 通过基本类型的包装类,调用parseXX方法即可。

int n1 = 100;
float f1 = 1.1F;
double d1 = 4.5;
boolean b1 = true;

String s1 = n1 + "";  // 100
String s2 = f1 + "";  // 1.1
String s3 = d1 + "";  // 4.5
String s4 = b1 + "";  // true
String s1 = "123";
byte num1 = Byte.parseByte(s1);  // 123
int num2 = Integer.parseInt(s1); // 123
double num3 = Double.parseDouble(s1); // 123.0
short num4 = Short.parseShort(s1); // 123
long num5 = Long.parseLong(s1); // 123
float num6 = Float.parseFloat(s1); // 123.0
boolean b = Boolean.parseBoolean("true"); // true

// 把字符串转为字符  含义:只能把字符串的第一个字符转为字节
s1.charAt(0); // 1

注意事项

1、注意将String类型转为基本类型时,要确保String类型能够转成有效的数据。比如“123”可以转数字,但"hello"就不可以了,
2、格式不正确,就会抛出异常。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/18160.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Pthread 并发编程(三)——深入理解线程取消机制

基本介绍 线程取消机制是 pthread 给我们提供的一种用于取消线程执行的一种机制&#xff0c;这种机制是在线程内部实现的&#xff0c;仅仅能够在共享内存的多线程程序当中使用。 基本使用 #include <stdio.h>#include <pthread.h>#include <assert.h>#incl…

数字化助力生产制造管理:专项生产管理系统

对于现今的生产企业而言&#xff0c;大家都是希望可以让整个制造生产过程更加的规范。同时越来越多的企业也已经分析到&#xff0c;在现有的社会生产方式中&#xff0c;如果不能够使加工业和制造业有先进的更为现代化的管理模式&#xff0c;是难以取得更好的竞争优势的。因此在…

Hadoop搭建

一、安装虚拟机 root 123456789 1、安装完系统后配置虚拟机ip vim /etc/sysconfig/network-scripts/ifcfg-ens33 DEFROUTE"yes" IPV4_FAILURE_FATAL"no" IPV6INIT"yes" IPV6_AUTOCONF"yes" IPV6_DEFROUTE"yes" IPV6_FAIL…

Git学习1

Git学习历程——努力入世的后浪~。 目录 一、Git安装 二、Git的初级使用 1.Git配置文件 2.Git基本命令 2.1 git init 2.2 ls -al 2.3 touch 2.4 git add 2.5 git commit -m 2.6 git status 2.7 git rm 2.8 git log 2.9 git reset --hard 2.10 git reflog 三、Git…

Linux操作系统面试题

Linux 概述 什么是Linux Linux是一套开源的类似Unix操作系统&#xff0c;是一个基于POSIX和Unix的多用户、多任务、支持多线程和多CPU的操作系统。它能运行主要的Unix工具软件、应用程序和网络协议。它支持32位和64位硬件。Linux继承了Unix以网络 为核心的设计思想&#xff0…

pytorch深度学习实战lesson22

第二十二课 LeNet LeNet神经网络由深度学习三巨头之一的Yan LeCun提出&#xff0c;他同时也是卷积神经网络 (CNN&#xff0c;Convolutional Neural Networks)之父。 LeNet主要用来进行手写字符的识别与分类&#xff0c;并在美国的银行中投入了使用。LeNet的实现确立了CNN的结构…

KKFileView在线预览禁用复制右键图片保存等操作

KKFileView在线预览禁用复制右键图片保存等操作一、需求背景二、修改kkFileview1.docx、doc文档不可复制、F12、右键、打印限制问题2.图片限制拖拽处理3.限制Excel转换后复制等操作4.PDF模式禁用右上角菜单栏一、需求背景 公司的运营平台&#xff0c;管理了一些如合同等内容&a…

【记录】软件自动修复工具Jaid配置、调试、运行及相关问题的解决方案

文章目录1. 前言2. Jaid原论文3. 环境4. 配置5. 调试6. 碰到的问题7. 一些发现8. 小结9. 参考文献1. 前言 创作开始时间&#xff1a;2022年11月18日20:50:38 如题&#xff0c;本文记录一下软件自动修复工具Jaid配置、调试、运行及相关问题的解决方案。 2. Jaid原论文 【ASE…

Jenkins+Docker+SVN实现SpringBoot项目半自动化部署

起因&#xff1a;入职后公司需要的技能&#xff0c;全部项目都使用的JenkinsDocker部署 Jenkins详细教程&#xff1a;知乎大佬写的文章 Docker详细教程&#xff1a;一个大佬的博客 SVN使用教程&#xff1a;一个大佬的博客 深入了解Jenkins、Docker、SVN&#xff0c;去上面三个大…

图书管理系统【java】

目录 &#x1f947;1.设计背景 &#x1f50e;2.设计思路 &#x1f511;3.book包 &#x1f4d7;3.1 Book类的实现 &#x1f4d5;3.2 BookList类的实现(书架) &#x1f511;4.user包 &#x1f4d9;4.1 User类的实现 &#x1f4d2;4.2 AdminUser&#xff08;管理员&#x…

MySQL导出csv数据文件

之前使用MySQL导出过一次线上数据&#xff0c;当时解决了乱码和数据没有正常分隔的问题。 参见这篇文章: 记一次“曲折“的MySQL数据导出 前几个月换了工作电脑&#xff0c;这几天又需要导出几十万的线上数据&#xff0c;在导出过程中还是出现了一些问题&#xff0c;再记录一…

OpenWrt 固件编译教程

一、编译环境准备 编译平台 阿里云 Ubuntu 20.04.5 LTS 安装编译环境依赖 sudo apt-get -y install build-essential asciidoc binutils bzip2 gawk gettext git libncurses5-dev libz-dev patch python3 python2.7 unzip zlib1g-dev lib32gcc1 libc6-dev-i386 subversion f…

ICME 会议介绍

官网翻译来的&#xff0c;具体内容还是看官网&#xff1a;IEEE ICME23 Author Information and Submission Instructions 目录 常会和特别会议 研讨会 行业/应用文件 演示 一般信息 示例文件、格式化指南和模板 电子论文提交 提交论文的分步说明 感兴趣的主题包括但不…

右键发送到菜单+批处理实现批量自动化为文件名添加统一的后缀

WinR打开运行&#xff0c;并输入shell:sendto&#xff0c;打开系统右键发送到菜单的所在文件夹。 新建记事本文档&#xff0c;修改文件名为公开.bat&#xff0c;编辑并保存如下内容&#xff1a; echo off :loop if not "%~1" "" (ren "%~1" &…

[附源码]SSM计算机毕业设计在线二手车交易信息管理系统JAVA

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

Linux系统配置 Samba客户端

配置 Samba客户端 1.Windows 客户端访问 samba 共享 无论Samba共享服务是部署在Windows系统上&#xff0c;还是部署在Linux系统上&#xff0c;通过Windows系统进行访问时&#xff0c;其步骤和方法都是一样的。下面假设Samba共享服务部署在Linux系统上&#xff0c;并通过Wind…

11返场钜惠,格式转换、图片/视频压缩免费小技巧

&#x1f4e3; 话不多说&#xff0c;直接上干货&#xff01; &#x1f525; 11返场钜惠&#xff0c;牛学长转码大师免费送&#xff01;&#xff01;&#xff01;&#x1f525; 那么牛学长转码大师能帮助您些什么呢&#xff1f;一起看看吧~ 一、格式转换 作为一款专业的格式…

Redis集群部署的三种模式

一、Redis简介 Redis 是一款完全开源免费、遵守BSD协议的高性能(NOSQL)的key-value数据库。它使用ANSI C语言编写&#xff0c;支持网络、可基于内存亦可持久化的日志型、Key-Value数据库&#xff0c;并提供多种语言的API。 Redis的使用场景有如下一些&#xff1a; 读写效率要…

计算机网络复习——第四章网络层

9月开始学习的一个月&#xff0c;I hope everthing be fine. 相关知识见&#xff0c;感觉比较容易入手 《计算机网络》&#xff08;谢希仁&#xff09;内容总结 | JavaGuide 重点知识&#xff1a; TCP/IP 协议中的网络层向上只提供简单灵活的&#xff0c;无连接的&#xff…

[附源码]SSM计算机毕业设计在线购物商城JAVA

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…