第2章 变量

news2025/1/10 23:50:13

目录

  • 1 变量
    • 1.1 什么是变量?
    • 1.2 声明变量
    • 1.2 变量的原理
  • 2 数据类型
    • 2.1 基本数据类型
      • 2.1.1 取值范围公式
      • 2.1.2 整型
      • 2.1.3 浮点型
      • 2.1.4 字符型
      • 2.1.5 布尔型
    • 2.2 引用数据类型
      • 2.2.1 数组[]
      • 2.2.2 类class
      • 2.2.3 接口interface
  • 3 数据类型转换
    • 3.1 自动类型转换
    • 3.2 强制类型转换
    • 3.3 String与基本数据类型相互转换

1 变量

1.1 什么是变量?

  1. 变量表示内存中的一个存储区域,不同数据类型的变量,占用的空间大小不同。
  2. 变量的三要素:数据类型+变量名+值
  3. 同一作用域内变量不能重名

1.2 声明变量

  1. 先声明,再赋值:int num; num = 1;
  2. 同时声明赋值:int num = 1;
  3. 注意
  • 局部变量必须赋初始值。
  • 类的成员变量可以不赋初值,创建类对象时自动赋默认初始值。
  • 类的静态变量可以不赋初值,加载类时自动赋默认初值。
public class Test {
    int a; // 成员变量
    static int b; // 静态变量
    public static void main(String[] args) {
        int c; // 局部变量
        System.out.println(c); // 局部变量不赋初值,调用时无法通过编译
        // 先变量,再赋值
        int d;
        d = 100;
        System.out.println(d);
        // 一步到位,声明+赋值
        int e = 800;
        System.out.println(e);
        
        System.out.println("类的成员变量未初始化:a = "+new Test().a);
        System.out.println("静态变量未初始化:b = "+b);
    }
}

1.2 变量的原理

在这里插入图片描述

  1. int num = 100;,创建变量num时,系统开辟一个对应数据类型大小(int为4字节)的内存空间,将值100的二进制码写入,num直接指向该空间。
  2. 注意:基本数据类型赋值时是值传递。

2 数据类型

Java有8种基本数据类型,3种引用数据类型。
在这里插入图片描述

2.1 基本数据类型

2.1.1 取值范围公式

  1. 各数据类型的表示范围不同,与其占用的内存空间有关
  2. 取值范围计算公式: ( − 2 n − 1 ) ∼ ( 2 n − 1 − 1 ) (-2^{n-1})\sim(2^{n-1}-1) (2n1)(2n11)
  3. 其中n表示该数据类型所占的bit数
    如:int类型占4字节=8bit,int的表示范围 ( − 2 8 − 1 ) ∼ ( 2 8 − 1 − 1 ) (-2^{8-1})\sim(2^{8-1}-1) (281)(2811)=-128~127
    同理其它类型也可以由此公式计算得到
类型占用存储空间范围
byte1字节-128~127
short2字节-32768~32767
int4字节 − 2 31 ∼ 2 31 − 1 -2^{31}\sim2^{31}-1 2312311
long8字节 − 2 63 ∼ 2 63 − 1 -2^{63}\sim2^{63}-1 2632631
float4字节 − 3.40 3 38 ∼ 3.40 3 38 -3.403^{38}\sim3.403^{38} 3.403383.40338
double8字节 − 1.79 8 308 ∼ 1.79 8 308 -1.798^{308}\sim1.798^{308} 1.7983081.798308

2.1.2 整型

类型占用存储空间范围
byte1字节-128~127
short2字节-32768~32767
int4字节 − 2 31 ∼ 2 31 − 1 -2^{31}\sim2^{31}-1 2312311
long8字节 − 2 63 ∼ 2 63 − 1 -2^{63}\sim2^{63}-1 2632631
  1. 不同类型的相同数值,所占的内存空间大小是不同的
  2. 整型常量默认为int,声明long型常量须后加‘l’或‘L’
int a = 1; // 这个1占用4个字节
long n3 = 1L;  //这是正确的
  1. 声明整型变量时遵守保小不保大,数据类型能小则小
  2. bit是计算机中的最小存储单位,byte是计算机中的基本存储单元。1 byte=8 bit

2.1.3 浮点型

类型占用存储空间范围
float4字节 − 3.40 3 38 ∼ 3.40 3 38 -3.403^{38}\sim3.403^{38} 3.403383.40338
double8字节 − 1.79 8 308 ∼ 1.79 8 308 -1.798^{308}\sim1.798^{308} 1.7983081.798308
  1. 机器中的存放形式:浮点数+指数位+尾数位。尾数位可能丢失,造成精度损失(小数都是近似值,只有精度高低的区别)
  2. 浮点型常量默认为double,声明float型常量须后加‘f’或‘F’
// 必须以下方法写
float num2 = 1.1F; //对 
double num3 = 1.1; //对
double num4 = 1.1f;//对
  1. 浮点型常量的2种表示形式:
  • 十进制数形式:5.12, 512.0f, .512
  • 科学计数法形式:5.12e2[5.12*10的2], 5.12E-2[5.12*10的-2次方]
// 浮点型两种表示形式
//十进制数形式:如,5.12  512.0f .512(必须有小数点)
float n = .123f;
System.out.println(n);
//科学计数法形式:如,5.12e2[5.12乘10的2次方]  
//5.12E-2[5.12乘10的-2次方]
System.out.println(5.12e2);
System.out.println(5.12E-2);

浮点数使用陷阱:
在这里插入图片描述

2.1.4 字符型

类型占用存储空间范围
char2字节unicode编码
  1. 表示单个字符,一般使用单引号’ '包括
  2. char的本质是整数,直接赋值整数时输出unicode码对应的字符
  3. 本质是整数,因此char是可以进行运算的,对于一个整数运算结果,在unicode码表中对应着一个字符

2.1.5 布尔型

类型占用存储空间范围
boolean1字节true,false

1.boolean类型数据只允许取TRUE和FALSE,无NULL
2. Java中,不能使用0代表false,非0代表true

2.2 引用数据类型

在这里插入图片描述

2.2.1 数组[]

数组链接: 后续更新链接

2.2.2 类class

类链接: 后续更新链接

2.2.3 接口interface

接口链接: 后续更新链接

3 数据类型转换

3.1 自动类型转换

java中进行赋值或运算时,精度小的类型可以自动转换为精度大的数据类型
在这里插入图片描述

  1. 多种类型的数据混合运算时,系统首先自动将所有数据转换为容量最大的那种数据类型,再进行计算
  2. 精度大的数据不能赋值给精度小的数据类型,反之可以(数据类型自动转换)
  3. (byte、short)和char不能相互自动转换,但可以计算,需要先转换为int类型
  4. 自动提升原则:表达式结果的类型自动提升为操作数中范围最大的类型

3.2 强制类型转换

  1. 将容量大的数据类型强制转换为容量小的数据类型,可能会造成精度降低或溢出
  2. 语法格式:int i = (int)1.9,其中( )为强制转换符
//演示强制类型转换
int n1 = (int)1.9;
System.out.println("n1=" + n1);//精度损失

int n2 = 2000;
byte b1 = (byte)n2;//将int类型强制转换为byte会溢出
System.out.println("b1=" + b1);//数据溢出

3.3 String与基本数据类型相互转换

  1. 基本类型 转 String类型:基本数据类型+" "
//基本数据类型转String类型
int n1 = 100;
float f1 = 1.1f;
double d1 = 4.5;
boolean b1 = true;
String s1 = n1 + "";
String s2 = f1 + "";
String s3 = d1 + "";
String s4 = b1 + "";
System.out.println(s1);
System.out.println(s2);
System.out.println(s3);
System.out.println(s4);
  1. String类型 转 基本类型:调用基本类型对应包装类的parseXX()方法,但String的值要满足转为int
//String转基本数据类型
//需要通过基本数据的包装类调用parseXX方法
String s5 = "123";
//OOP时细说,现在暂时了解 parse解析
//使用基本数据类型对应的包装类,的相应方法,得到基本数据类型
int s5Int = Integer.parseInt(s5);// String转int
double s5Double = Double.parseDouble(s5);//String转double
float s5Float = Float.parseFloat(s5);
short s5Short = Short.parseShort(s5);
byte s5Byte = Byte.parseByte(s5);
long s5Long = Long.parseLong(s5);
boolean s5Boolean = Boolean.parseBoolean("true");
System.out.println(s5Int);
System.out.println(s5Double);

//怎么把字符串转成字符char -> 指把字符串的第一个字符得到
//解读 s5.charAt(0) 得到s5字符串的第一个字符'1'
System.out.println(s5.charAt(0));

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

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

相关文章

备份c盘中的所有数据的3种方法推荐!

为什么要备份C盘中的所有数据? 备份c盘中的所有数据,主要是为了避免以下几种突发情况: 感染病毒。 操作不当导致系统文件损坏,崩溃。 蓝屏死机(BOSD)或黑屏死机。 物理灾害。 磁盘出现物理坏道等。…

QWebEngine应用---cookies存储及自动登录

什么是cookies? 浏览器Cookie指某些网站为了辨别用户身份、进行 session 跟踪而储存在用户本地终端上的数据,当前主流网站和浏览器都使用Cookies来实现自动登录 QWebEngineCookieStore QWebEngine基于Chromium内核,和Chrome浏览器一样支持…

微信聚合聊天,轻松一人管理多个微信

看这篇文章的你是否有以下烦恼: 1.微信账号太多,管理过于麻烦 2.微信号多,需要很多员工来管理,人工费用多 3.多个微信打开后会造成微信登陆界面过多,切换操作十分不方便 4.当微信多的时候,新消息提示也多…

docker安装nacos并配置数据库

1、下载镜像 docker pull nacos/nacos-server 查看下载镜像 docker images 2、启动nacos 注意:如果nacos版本在2.0及以上,需要把8848、9848和9849三个端口映射出来,否则访问会404失败 docker run --env MODEstandalone \ --name nacos -d…

【AI新趋势期刊#2】AI发明计算机算法,如何给大模型排行,照片秒变二维码,视频一键动漫风

前言 每天都要浏览大量AI相关新闻,是不是感到信息量爆炸,有效信息少? 这么多新产品和新工具,到底哪些是真正是有价值的,哪些只是浮躁的一时热点? 想参与AI产品和工具的开发,从哪里能够获得大…

MongoDB【MongoDB命令、CRUD操作 】(二)-全面详解(学习总结---从入门到深化)

目录 MongoDB命令 CRUD操作 MongoDB命令 基本操作 查看数据库 show dbs; 切换数据库 如果没有对应的数据库则创建 use 数据库名;创建集合 db.createCollection("集合名") 查看集合 show tables; show collections; 删除集合 db.集合名.drop(); 删除当前…

Robust Secure Aggregation with Lightweight Verification for Federated Learning

摘要: 可验证的安全聚合(VSA)是联邦学习(FL)中的关键过程,其中安全聚合实现局部梯度聚合,同时保留数据机密性,并且可验证性使参与者能够验证中央服务器(CS)返…

【Linux】程序替换

🔥🔥 欢迎来到小林的博客!!       🛰️博客主页:✈️小林爱敲代码       🛰️博客专栏:✈️Linux之路       🛰️社区 :✈️ 进步学堂       &a…

51单片机地震监测语音报警提示系统MPU6050TTS报警

实践制作DIY- GC0153--- 地震监测语音报警提示系统 基于51单片机设计------- 地震监测语音报警提示系统 二、功能介绍: STC89C52单片机TTS语音播报模块MPU-6050角度传感器LED灯显示一个按键 1.获取MPU-6050角度数据,然后根据角度数据计算出0~10级的地震…

B站w_rid,qv_id加密分析

本文仅供学习交流,只提供关键思路不会给出完整代码,严禁用于非法用途,若有侵权请联系我删除! 网站地址:aHR0cHM6Ly9zZWFyY2guYmlsaWJpbGkuY29tL2FsbD92dD03OTExMjUwNSZrZXl3b3JkPSVFNyU4OCVBQyVFOCU5OSVBQg 关键字搜…

Flutter 布局构建

文章目录 一、布局类组件简介二、理解 Flutter 布局约束三、线性布局(Row和Column)1. 主轴和纵轴2. Row3. Column4. 特殊情况 四、弹性布局(Flex 和 Expanded)1. Flex2. Expanded 五、流式布局(Wrap 和 Flow&#xff0…

记录一次Ubuntu系统安装tenforflow

电脑已有版本 Ubuntu 20.04GCC 9.4.0CUDA 11.3 需要指定版本的python库 tensorflow 2.6.0numpy 1.19.2matplotlib 3.4.0keras 2.6.0protobuf 3.19.6 我的环境

LeetCode刷题 | 583. 两个字符串的删除操作、72. 编辑距离

583. 两个字符串的删除操作 给定两个单词 word1 和 word2 ,返回使得 word1 和 word2 相同所需的最小步数。 每步 可以删除任意一个字符串中的一个字符。 示例 1: 输入: word1 "sea", word2 "eat" 输出: 2 解释: 第一步将 "…

Flutter Bloc组件buildWhen的妙用

在Flutter中当状态发生改变的时候,Widget会重新build刷新页面。但是当状态发生改变的时候后,我们指向让有关联的Widget重绘,与之无关的Widget保持不变,比如对于登录页面,有用户名和密码两个组件:如下图。 构建代码如下: 当我们输入用户名的时候,仅仅希望_UserNameInp…

C语言王国探险记之转义字符+结构语句

王国探险记系列 文章目录(4) 一,什么是转义字符 1.1转义字符的重要性? 二,了解一下转义字符有那些 三,精讲转义字符 3.1转义字符\n 3.2转义字符\? 3.3转义字符 \‘和\" 3.3转义字符 \\ 3.4转义字…

【云原生丶Kubernetes】Kubernetes初体验

人生若只如初见,何事秋风悲画扇。 前言 Kubernetes 是目前最流行的容器编排工具之一,由Google开发并维护。它提供了完整的容器编排解决方案,包括自动化部署、资源管理和调度、服务发现和负载均衡等功能。 然而,对于初学者来说&a…

Android Studio实现内容丰富的安卓民宿酒店预订平台

如需源码可以添加q-------3290510686,也有演示视频演示具体功能,源码不免费,尊重创作,尊重劳动。 项目编号106 1.开发环境 android stuido jdk1.8 eclipse mysql tomcat 2.功能介绍 安卓端: 1.注册登录 2.查看民宿 3.民…

缔造网络世界的奇迹:OSI参考模型的魔力之旅

文章目录 一 OSI参考模型1.1 OSI参考模型简介1.2 OSI参考模型的下特性和优点1.3 OSI参考模型的层次结构1.4 OSI参考模型层次间的关系以及数据封装 二 OSI参考模型的层次结构详解2.1 物理层2.2 数据链路层2.3 网络层2.3.1 网络层地址2.3.2 路由协议与可路由协议2.3.3 面向连接和…

激光SLAM(二):点云拟合和平面参数化

点云拟合和平面参数 一、平面拟合:特征值法和SVD法二、平面参数化1)Hesse形式2)球坐标3)最近点4) 单位四元数 三、直线拟合 一、平面拟合:特征值法和SVD法 平面方程如下,n是法向量,d是截距 当…

python协程—asyncio模块

目录 什么是协程 协程的特点 为什么使用协程 asyncio协程模块 多任务的协程 总结 什么是协程 协程(Coroutine)是一种并发编程的技术,它允许程序在执行过程中暂停和恢复。协程可以看作是一种特殊的函数,它可以暂停执行&#…