热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

第02章变量

变量介绍定义定义:变量是程序的基本组成单位,变(变化)量(值)变量有三个基本要素ÿ




变量介绍

定义

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

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



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



变量快速入门

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("差值非常小&#xff0c;满足规定的精度&#xff0c;认为相等");
}
System.out.println("求差的绝对值" &#43; Math.abs(num9 - num8));
}
}

Java API文档

1、API&#xff08;Application Programming Interface&#xff0c;应用程序编程接口&#xff09;

中文在线文档&#xff1a;

码工具 - 代码在线工具箱

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


字符类型


基本介绍

字符类型可以表示单个字符&#xff0c;char是两个字节&#xff0c;可以存放汉字。



格式&#xff1a; char c1 &#61; ‘张’ 注意使用单引号。


char c1 &#61; &#39;\n&#39;; // 输出换行
char c2 &#61; 97; // 97数字编码对应的字符

使用细节

1、字符使用单引号

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

// 在Java中&#xff0c;char的本质是一个整数&#xff0c;输出的为Unicode码中对应的字符。
char c1 &#61; 97;
System.out.println(c1);
char c2 &#61; &#39;a&#39;;
System.out.println((int)c2); // 输出‘a’对应的数字 97
System.out.println(&#39;a&#39; &#43; 10); // 107

在这里插入图片描述

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

System.out.println(&#39;a&#39; &#43; 10); // 107 类型为&#xff1a;class java.lang.Integer

测试

char c5 &#61; &#39;b&#39; &#43; 1;
System.out.println((int)c5); // 输出 99
System.out.println(c5); // 输出值为class java.lang.Character 类型&#xff0c;char 99在Unicode中对应的字符&#xff0c;即输出为 ‘c’

编码

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

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

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

gbk&#xff1a;字母1个字节&#xff0c;汉字2个字节 gbk表示的汉字数量不如utf-8多。

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

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


布尔类型


基本介绍

1、布尔类型数据只允许取值 true 和 false &#xff0c; 无null

2、boolean 类型占 1个字节

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


注意

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


数据类型转换

自动数据类型转换


定义&#xff1a;



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


数据类型按照精度&#xff08;容量&#xff09;大小排序为&#xff1a;

char

byte

int a &#61; &#39;c&#39;; // 对 char --> int
double d &#61; 80; // 对&#xff0c;输出为80.0 int -- double

注意事项【重点】

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

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

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

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

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

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

byte b2 &#61; 1;
byte b3 &#61; 2;
short s1 &#61; 1;
short s2 &#61; b2 &#43; s1; //错误。因为 b2 &#43; s1 &#61;> int &#xff0c;int转为short会有内存损失。
byte b4 &#61; b2 &#43; b3; // 运算结果为int&#xff0c; 报错❌

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

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

byte b4 &#61; 1;
short s3 &#61; 100;
int num200 &#61; 200;
double num300 &#61; 1.1;
double num500 &#61; b4 &#43; s3 &#43; num200 &#43; num300; //输出为最大的类型double类型&#xff0c;。

强制类型转换


介绍

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

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

细节

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

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

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

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

测试

在这里插入图片描述


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


转换方法

基本类型转String类型&#xff1a;将基本类型的值 &#43; “” 即可。

String类型转基本数据类型&#xff1a; 通过基本类型的包装类&#xff0c;调用parseXX方法即可。

int n1 &#61; 100;
float f1 &#61; 1.1F;
double d1 &#61; 4.5;
boolean b1 &#61; true;
String s1 &#61; n1 &#43; ""; // 100
String s2 &#61; f1 &#43; ""; // 1.1
String s3 &#61; d1 &#43; ""; // 4.5
String s4 &#61; b1 &#43; ""; // true

String s1 &#61; "123";
byte num1 &#61; Byte.parseByte(s1); // 123
int num2 &#61; Integer.parseInt(s1); // 123
double num3 &#61; Double.parseDouble(s1); // 123.0
short num4 &#61; Short.parseShort(s1); // 123
long num5 &#61; Long.parseLong(s1); // 123
float num6 &#61; Float.parseFloat(s1); // 123.0
boolean b &#61; Boolean.parseBoolean("true"); // true
// 把字符串转为字符 含义&#xff1a;只能把字符串的第一个字符转为字节
s1.charAt(0); // 1

注意事项

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







推荐阅读
  • 使用Maven JAR插件将单个或多个文件及其依赖项合并为一个可引用的JAR包
    本文介绍了如何利用Maven中的maven-assembly-plugin插件将单个或多个Java文件及其依赖项打包成一个可引用的JAR文件。首先,需要创建一个新的Maven项目,并将待打包的Java文件复制到该项目中。通过配置maven-assembly-plugin,可以实现将所有文件及其依赖项合并为一个独立的JAR包,方便在其他项目中引用和使用。此外,该方法还支持自定义装配描述符,以满足不同场景下的需求。 ... [详细]
  • 深入剖析Java中SimpleDateFormat在多线程环境下的潜在风险与解决方案
    深入剖析Java中SimpleDateFormat在多线程环境下的潜在风险与解决方案 ... [详细]
  • 本文详细介绍了在 Oracle 数据库中使用 MyBatis 实现增删改查操作的方法。针对查询操作,文章解释了如何通过创建字段映射来处理数据库字段风格与 Java 对象之间的差异,确保查询结果能够正确映射到持久层对象。此外,还探讨了插入、更新和删除操作的具体实现及其最佳实践,帮助开发者高效地管理和操作 Oracle 数据库中的数据。 ... [详细]
  • 本文探讨了如何利用Java代码获取当前本地操作系统中正在运行的进程列表及其详细信息。通过引入必要的包和类,开发者可以轻松地实现这一功能,为系统监控和管理提供有力支持。示例代码展示了具体实现方法,适用于需要了解系统进程状态的开发人员。 ... [详细]
  • 分享一款基于Java开发的经典贪吃蛇游戏实现
    本文介绍了一款使用Java语言开发的经典贪吃蛇游戏的实现。游戏主要由两个核心类组成:`GameFrame` 和 `GamePanel`。`GameFrame` 类负责设置游戏窗口的标题、关闭按钮以及是否允许调整窗口大小,并初始化数据模型以支持绘制操作。`GamePanel` 类则负责管理游戏中的蛇和苹果的逻辑与渲染,确保游戏的流畅运行和良好的用户体验。 ... [详细]
  • 本文探讨了如何利用 jQuery 的 JSONP 技术实现跨域调用外部 Web 服务。通过详细解析 JSONP 的工作原理及其在 jQuery 中的应用,本文提供了实用的代码示例和最佳实践,帮助开发者解决跨域请求中的常见问题。 ... [详细]
  • 本指南介绍了如何在ASP.NET Web应用程序中利用C#和JavaScript实现基于指纹识别的登录系统。通过集成指纹识别技术,用户无需输入传统的登录ID即可完成身份验证,从而提升用户体验和安全性。我们将详细探讨如何配置和部署这一功能,确保系统的稳定性和可靠性。 ... [详细]
  • 使用 ListView 浏览安卓系统中的回收站文件 ... [详细]
  • 在使用 Qt 进行 YUV420 图像渲染时,由于 Qt 本身不支持直接绘制 YUV 数据,因此需要借助 QOpenGLWidget 和 OpenGL 技术来实现。通过继承 QOpenGLWidget 类并重写其绘图方法,可以利用 GPU 的高效渲染能力,实现高质量的 YUV420 图像显示。此外,这种方法还能显著提高图像处理的性能和流畅性。 ... [详细]
  • 在Android平台中,播放音频的采样率通常固定为44.1kHz,而录音的采样率则固定为8kHz。为了确保音频设备的正常工作,底层驱动必须预先设定这些固定的采样率。当上层应用提供的采样率与这些预设值不匹配时,需要通过重采样(resample)技术来调整采样率,以保证音频数据的正确处理和传输。本文将详细探讨FFMpeg在音频处理中的基础理论及重采样技术的应用。 ... [详细]
  • 在Java基础中,私有静态内部类是一种常见的设计模式,主要用于防止外部类的直接调用或实例化。这种内部类仅服务于其所属的外部类,确保了代码的封装性和安全性。通过分析JDK源码,我们可以发现许多常用类中都包含了私有静态内部类,这些内部类虽然功能强大,但其复杂性往往让人感到困惑。本文将深入探讨私有静态内部类的作用、实现方式及其在实际开发中的应用,帮助读者更好地理解和使用这一重要的编程技巧。 ... [详细]
  • 线程能否先以安全方式获取对象,再进行非安全发布? ... [详细]
  • 本文详细介绍了在 Android 7.1 系统中调整屏幕分辨率和默认音量设置的方法。针对系统默认音量过大的问题,提供了具体的步骤来降低系统、铃声、媒体和闹钟的默认音量,以提升用户体验。此外,还涵盖了如何通过系统设置或使用第三方工具来优化屏幕分辨率,确保设备显示效果更加清晰和流畅。 ... [详细]
  • 在深入掌握Spring框架的事务管理之前,了解其背后的数据库事务基础至关重要。Spring的事务管理功能虽然强大且灵活,但其核心依赖于数据库自身的事务处理机制。因此,熟悉数据库事务的基本概念和特性是必不可少的。这包括事务的ACID属性、隔离级别以及常见的事务管理策略等。通过这些基础知识的学习,可以更好地理解和应用Spring中的事务管理配置。 ... [详细]
  • 在本文中,我们将为 HelloWorld 项目添加视图组件,以确保控制器返回的视图路径能够正确映射到指定页面。这一步骤将为后续的测试和开发奠定基础。首先,我们将介绍如何配置视图解析器,以便 SpringMVC 能够识别并渲染相应的视图文件。 ... [详细]
author-avatar
长春搜房-杨志玲
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有