Java基础 变量与数据类型(类型转换)

news2024/11/16 9:45:13

变量

为什么需要变量

一花一世界,如果把一个程序看做一个世界或一个社会的话,那么变量就是程 序世界的花花草草、万事万物。即,变量是程序中不可或缺的组成单位,最基 本的存储单元。

初识变量

变量的概念

  • 内存中的一个存储区域,该区域的数据可以在同一类型范围内不断变化

  • 变量的构成包含三个要素:数据类型、变量名、存储的值

  • Java 中变量声明的格式:数据类型 变量名 = 变量值

变量的作用

用于在内存中保存数据。

使用变量注意

  • Java 中每个变量必须先声明,后使用。

  • 使用变量名来访问这块区域的数据。

  • 变量的作用域:其定义所在的一对{ }内。

  • 变量只有在其作用域内才有效。出了作用域,变量不可以再被调用。

  • 同一个作用域内,不能定义重名的变量。

Java 中变量的数据类型

Java 中变量的数据类型分为两大类

  • 基本数据类型:包括 整数类型(byte, short, int, long)、浮点数类型(float, double)、字符类型(char)、布尔类型(boolean)

  • 引用数据类型:包括数组(array)、 类(class)、接口(interface)、枚举(enum)、注解(annotation)、记录(record)。

变量的使用

变量的声明

格式:数据类型 变量名;

注意:变量的数据类型可以是基本数据类型,也可以是引用数据类型。

//例如: //存储一个整数类型的年龄 int age;

//存储一个小数类型的体重 double weight;

//存储一个单字符类型的性别 char gender;

//存储一个布尔类型的婚姻状态 boolean marry;

//存储一个字符串类型的姓名 String name;

//声明多个同类型的变量
int a,b,c; //表示 a,b,c 三个变量都是 int 类型。

变量的赋值

给变量赋值,就是把“值”存到该变量代表的内存空间中。同时,给变量赋的值 类型必须与变量声明的类型一致或兼容

变量赋值的语法格式: 变量名 = 值;

举例 1:可以使用合适类型的常量值给已经声明的变量赋值举例

age = 18; 
weight = 109; 
gender = '女';

举例 2:可以使用其他变量或者表达式给变量赋值

int m = 1; int n = m;
int x = 1;
int y = 2;
int z = 2 * x + y;

举例 3:变量可以反复赋值

//先声明,后初始化
 char gender; 
gender = '女';
//给变量重新赋值,修改 gender 变量的值
gender = '男';
System.out.println("gender = " + gender); //gender = 男

举例 4:也可以将变量的声明和赋值一并执行

boolean isBeauty = true; 
String name = "迪丽热巴";

变量内存结构如图

基本数据类型

基本数据类型范围 

整数类型(byte、short、int、long)

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

  • 定义 long 类型的变量,赋值时需要以"l"或"L"作为后缀。

  • Java 程序中变量通常声明为 int 型,除非不足以表示较大的数,才使用 long。

  • Java 的整型常量默认为 int 型。

浮点类型(float、double)

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

浮点型常量有两种表示形式:

十进制数形式。如:5.12 512.0f .512 (必须有小数点)

科学计数法形式。如:5.12e2 512E2 100E-2

float:单精度,尾数可以精确到 7 位有效数字。很多情况下,精度很难满足需求。定义 float 类型的变量,赋值时需要以"f"或"F"作为后缀。

double:双精度,精度是 float 的两倍。通常采用此类型。

Java 的浮点型常量默认为double型。

关于浮点型精度的说明

  • 并不是所有的小数都能可以精确的用二进制浮点数表示。二进制浮点数不能精确的表 示 0.1、0.01、0.001 这样 10 的负次幂。

  • 浮点类型 float、double 的数据不适合在不容许舍入误差的金融计算领域。如果需要 精确数字计算或保留指定位数的精度,需要使用 BigDecimal 类。

//测试 1:(解释见章末企业真题:为什么 0.1 + 0.2 不等于 0.3) 
System.out.println(0.1 + 0.2);//0.30000000000000004
//测试 2:
float ff1 = 123123123f;
float ff2 = ff1 + 1; 
System.out.println(ff1); 
System.out.println(ff2); 
System.out.println(ff1 == ff2); // true, 是因为浮点类型 float、double 精度不高
// 测试3: 定义圆周率并赋值为 3.14,现有 3 个圆的半径分别为 1.2、2.5、6,求
它们的面积。

public class Exercise1 {
    public static void main(String[] args) { 
        double PI = 3.14;  //圆周率
        double radius1 = 1.2; 
        double radius2 = 2.5; 
        int radius3 = 6;

        System.out.println("第 1 个圆的面积:" + PI * radius1 * radius1);
        System.out.println("第 2 个圆的面积:" + PI * radius2 * radius2); 
        System.out.println("第 3 个圆的面积:" + PI * radius3 * radius3); 
    }
}

字符类型(char)

char 型数据用来表示通常意义上“字符”(占 2 字节)

Java 中的所有字符都使用 Unicode 编码,故一个字符可以存储一个字母,一个汉字,或 其他书面语的一个字符。

字符型变量的三种表现形式:

  • 形式 1:使用单引号(' ')括起来的单个字符。 例如:char c1 = 'a'; char c2 = '中'; char c3 = '9';

  • 形式 2:直接使用 Unicode 值来表示字符型常量:‘\uXXXX’。其中, XXXX 代表一个十六进制整数。

    例如:\u0023 表示 '#'。

  • 形式 3:Java 中还允许使用转义字符‘\’来将其后的字符转变为特殊字符 型常量。例如:char c3 = '\n'; // '\n'表示换行符

char 类型是可以进行运算的。因为它都对应有 Unicode 码,可以看做是一个数值。

转义字符说明Unicode表示方式

\n

换行符

\u000a

\t

制表符

\u0009

\"

双引号

\u0022

\'

单引号

\u0027

\\

反斜线

\u005c

\b

退格符

\u0008

\r

回车符

\u000d

字符集

也叫编码表。是一个系统支持的所有字符的集合,包括各国家文字、标点符号、图形符号、数字等

详细的参考: 关于字符集

char c = 97;
System.out.println(c) // a

布尔类型(boolean)

boolean 类型用来判断逻辑条件,一般用于流程控制语句中:

  • if 条件控制语句;

  • while 循环控制语句;

  • for 循环控制语句;

  • do-while 循环控制语句;

boolean 类型数据只有两个值:true、false,无其它值

  • 不可以使用 0 或非 0 的整数替代 false 和 true,这点和 C 语言不同。

  • 拓展:Java 虚拟机中没有任何供 boolean 值专用的字节码指令,Java 语言 表达所操作的 boolean 值,在编译之后都使用 java 虚拟机中的 int 数据类 型来代替:true 用 1 表示,false 用 0 表示。

boolean isFlag = true;
if(isFlag){ 
    //true 分支
}else{ 
    //false 分支
}
 

Less is More!建议不要这样写:if ( isFlag = = true ),只有新手才如 此。关键也很容易写错成 if(isFlag = true),这样就变成赋值 isFlag 为 true 而不是判断

!老鸟的写法是 if (isFlag)或者 if ( !isFlag)。

基本数据类型变量间运算规则

在 Java 程序中,不同的基本数据类型(只有 7 种,不包含 boolean 类型)变量 的值经常需要进行相互转换。

转换的方式有两种:自动类型提升和强制类型转换。

自动类型提升

规则:将取值范围小(或容量小)的类型自动提升为取值范围大(或容量大) 的类型 。

基本数据类型的转换规则如图所示:

当把存储范围小的值(常量值、变量的值、表达式计算的结果值)赋值给 了存储范围大的变量时

int i = 'A';//char 自动升级为 int,其实就是把字符的编码值赋值给 i 变量了 
double d = 10; //int 自动升级为 double
long num = 1234567; //右边的整数常量值如果在 int 范围呢,编译和运行都可以通过,这里涉及到数据类型转换
// byte bigB = 130; //错误,右边的整数常量值超过 byte 范围
long bigNum = 12345678912L; //右边的整数常量值如果超过 int 范围,必须加 L, 显式表示 long 类型。否则编译不通过

当存储范围小的数据类型与存储范围大的数据类型变量一起混合运算时, 会按照其中最大的类型运算。

int i = 1; byte b = 1; double d = 1.0;
double sum = i + b + d;//混合运算,升级为 double

注意: 当 byte,short,char 数据类型的变量进行算术运算时,按照 int 类型处理。

byte b1 = 1;
byte b2 = 2;
byte b3 = b1 + b2; //编译报错,b1 + b2 自动升级为 int, 至少需要使用int来接收, 使用short也不行
char c1 = '0';
char c2 = 'A';
int i = c1 + c2; //至少需要使用 int 类型来接收 
System.out.println(c1 + c2);//113

long s = 123; // 将int类型赋值给long类型, 自动类型提升
long a = 45243542345235; // 结果会报错, 45243542345235是int类型, 报错是因为超出了int范围, 所以报错
long c = 45243542345235L;

float f1 = 12.4f
float f2 = 12.3;  // 12.3默认是double类型, 将double类型赋值给float类型, 不满足自动类型提升的规则, 所以结果会报错

强制类型转换

规则:将取值范围大(或容量大)的类型强制转换成取值范围小(或容量小) 的类型。

自动类型提升是 Java 自动执行的,而强制类型转换是自动类型提升的 逆运算,需要我们自己手动执行。

转换格式: 数据类型 1 变量名 = (数据类型 1)被强转数据值;  //()中的数据类型必须<=变量值 的数据类型

将3.14 赋值到int 类型变量会发生什么?产生编译失败,肯定无法赋值。

int i = 3.14; // 编译报错

想要赋值成功,只有通过强制类型转换,将double 类型强制转换成int 类型才 能赋值。

1. 当把存储范围大的值(常量值、变量的值、表达式计算的结果值)强制转 换为存储范围小的变量时,可能会损失精度或溢出。 

int i = (int)3.14;  //损失精度, 结果是3 , 截断操作, 不是四舍五入
double d = 1.2;
int num = (int)d;  //损失精度
int i = 200;
byte b = (byte)i;  //溢出, 200超出了byte的范围

2. 当某个值想要提升数据类型时,也可以使用强制类型转换。这种情况的强制类型转换是没有风险的,通常省略。

int i = 1;
int j = 2;
double bigger = (double)(i/j);

声明 long 类型变量时,可以出现省略后缀的情况。float 则不同。

long l1 = 123L;
longl2=123;//如何理解呢? 此时可以看做是int类型的123自动类型提升为l ong 类型
//long l3 = 123123123123; //报错,因为 123123123123 超出了 int 的范围。 long l4 = 123123123123L;
//float f1 = 12.3; //报错,因为 12.3 看做是 double,不能自动转换为 float 类型
float f2 = 12.3F;
float f3 = (float)12.3;

String与基本数据类型变量间的运算

详细查看: Java基础 引用数据类型String(字符串)

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

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

相关文章

4.计算机网络基础

文章目录 1.网络互联模型2.常见网络协议&#xff08;1&#xff09;应用层协议&#xff1a;FTP、HFTP、HTTP&#xff08;2&#xff09;传输层协议&#xff1a;TCP、UDP三次握手、四次挥手&#xff08;重要&#xff09;TCP 和 UDP 区别&#xff08;1&#xff09;连接&#xff08;…

【可乐荐书】人工智能数学基础

本栏目将推荐一些经典的、有趣的、有启发性的书籍&#xff0c;这些书籍涵盖了各个领域&#xff0c;包括文学、历史、哲学、科学、技术等等。相信这些书籍不仅可以让你获得知识&#xff0c;还可以让你感受到阅读的乐趣和魅力。 今天给大家推荐的书籍是&#xff1a;《人工智能数…

1688阿里巴巴中国站按关键字搜索抓取新品数据API接口展示示例(封装可高并发)(Java系列)

一、电商平台上新的重要性 电商平台上新非常重要。 首先&#xff0c;持续的新品上线可以吸引更多的用户访问平台和留存用户的兴趣。新品可以激发用户想要知道更多、购买更多的欲望&#xff0c;从而提高用户的使用频率和转化率。此外&#xff0c;新品上线也可以使电商平台更具…

windows下lib文件中的函数列表查看

可以使用Visual Studio中自带的dumpbin工具&#xff0c;首先应确保该文件路径已经加载到了环境变量中&#xff0c;以博主环境为例&#xff0c;其路径在 D:\xxxxxxxxxxxxx\Microsoft Visual Studio 14.0\VC\bin dumpbin.exe /LINKERMEMBER libfile.lib

pytorch房价预测(线性回归)

文章目录 一、前言二、实现方法 一、前言 任务目标&#xff1a;根据统计在csv中的房屋属性相关数据&#xff0c;预测房屋最终成交价格数据集&#xff1a;《住宅属性数据集》&#xff0c;自取https://download.csdn.net/download/weixin_43721000/87785277 3.数据集字段解释&am…

JAVA开发(对大表数据逐条进行处理踩的坑记录一下)

一、编程语言介绍 所使用的编程语言为JAVA。纯后端开发。 二、炫技代码分享 现在我编写代码一般通过逆向工程生成&#xff0c;只需要设计好数据库表就可以逆向生成后端的接口模块。 三、案例分享 逆向工程。逆向工程涉及到的输出模块。具体运用需要关注和联系博主分享使用。 ##…

day82【Leetcode】

文章目录 前言一、检查替换后的词是否有效&#xff08;力扣1003&#xff09;二、有效的括号&#xff08;力扣20&#xff09;【1003类似题目】每日一题&#xff1a;数青蛙&#xff08;力扣1419&#xff09; 前言 1、检查替换后的词是否有效 2、有效的括号 3、数青蛙 一、检查替…

操作系统第三章——内存管理(中)

九月重楼二两&#xff0c;冬至蝉蜕一钱&#xff0c;煎入隔年雪煮沸&#xff0c;可治人间相思苦疾&#xff0c; 可是&#xff0c;重楼七叶一花&#xff0c;冬日何来蝉蜕&#xff0c;原是相思无解 殊不知 夏枯即为九叶重楼&#xff0c;掘地三尺寒蝉现&#xff0c;除夕子时雪&…

2022级云曦实验室考试(一)pwn

讲真&#xff0c;俺都不知道pwn是啥&#xff0c;等俺搜搜&#xff01; pwn简介&#xff1a; CTF中的pwn指的是通过通过程序本身的漏洞&#xff0c;编写利用脚本破解程序拿到主机的权限&#xff0c;这就需要对程序进行分析&#xff0c;了解操作系统的特性和相关漏洞&#xff0…

[PyTorch][chapter 35][Batch Normalize]

前言&#xff1a; Batch Norm 是深度学习里面常用的技术之一&#xff0c;主要作用是 把指定维度参数约束到范围内,有效的解决了梯度弥散 现象 ,有助于加速模型的训练速度。 问题解释 特征缩放 Feature Scaling Batch Normalization Torch API 一 问题解释 如上图,输入范…

《开箱元宇宙》爱心熊通过 The Sandbox 与粉丝建立更紧密的联系

你们有没有想过 The Sandbox 如何融入世界上最具标志性的品牌和名人的战略&#xff1f;在本期《开箱元宇宙》系列中&#xff0c;我们与 Cloudco Entertainment 的数字内容顾问 Derek Roberto 聊天&#xff0c;了解为什么爱心熊决定在 The Sandbox 中试验 web3&#xff0c;以及他…

Grpc 整合 Nacos SpringBoot 日常使用(Java版本)包括 Jwt 认证

前言 最近感到有点子迷茫&#xff0c;天天写业务代码有点麻木&#xff0c;趁着有点空闲时间去了解了下 Grpc 这个框架&#xff0c;一方面是听说他很火&#xff0c;支持多种语言。另一方面也是为了将来可能需要用到他&#xff0c;未雨绸缪一下&#xff0c;当然了本文只是基于使用…

Python数据可视化入门教程

什么是数据可视化&#xff1f; 数据可视化是为了使得数据更高效地反应数据情况&#xff0c;便于让读者更高效阅读&#xff0c;通过数据可视化突出数据背后的规律&#xff0c;以此突出数据中的重要因素&#xff0c;如果使用Python做数据可视化&#xff0c;建议学好如下这四个Pyt…

数据可视化是什么?怎么做?看这篇文章就够了

数据可视化是什么 数据可视化主要旨在借助于图形化手段&#xff0c;清晰有效地传达与沟通信息。也就是说可视化的存在是为了帮助我们更好的去传递信息。 我们需要对我们现有的数据进行分析&#xff0c;得出自己的结论&#xff0c;明确要表达的信息和主题&#xff08;即你通过…

https 建立连接过程

从真实的抓包开始 根据抓包结果可以看到 从客户端发起https 请求开始&#xff0c;主要经过以下几个过程&#xff1a; 1、tcp 三次握手 2、浏览器发送 Client Hello 到服务器 3、服务器对Hello 进行响应 4、服务器发送Server Hello 、证书、证书状态、服务器密钥&#xff0c;到…

【Linux服务】web基础与HTTP协议

web基础与HTTP协议 一、域名概述1.1域名空间结构1.2域名注册 二、网页的概念三、HTML概述3.1HTML超文本标记语言 四、Web概述4.1Web1.0与Web2.04.2静态网页4.3动态网页 五、HTTP协议概述5.1HTTP协议版本5.2http请求方法5.3GET 和 POST 比较5.4HTTP状态码5.5HTTP请求流程 一、域…

无代码开发:让程序员更高效,让非编程人员也能参与

说起无代码开发&#xff0c;可能大多数人的第一反应就是&#xff1a;“我不知道&#xff01;” 作为一种能快速实现复杂系统的软件开发模式&#xff0c;无代码开发目前还处于推广阶段。但在我们看来&#xff0c;无代码开发是一个很好的尝试&#xff0c;它能让程序员更高效&…

《汇编语言》- 读书笔记 - 第4章-第一个程序

《汇编语言》- 读书笔记 - 第4章-第一个程序 4.1 一个源程序从写出到执行的过程4.2 源程序程序 4.11. 伪指令1.1 segment ends 声明段1.2 end 结束标记1.3 assume 关联 2. 源程序中的“程序”3. 标号4. 程序的结构5. 程序返回6. 语法错误和逻辑错误 4.3 编辑源程序4.4 编译4.5 …

Electron 我与你,今天不谈技术谈感情!

目录 前言一、无知二、初见三、再见四、相遇五、行动总结 前言 今天不谈技术&#xff0c;谈谈我和 Electron 的缘分。可能有人觉得&#xff0c;或许有些人认为&#xff0c;和一个框架谈感情这不是疯了吗&#xff1f;但是&#xff0c;我相信每个开发者都会有同样的经历&#xf…

数字化浪潮下,运维绕不开的需求升级

伴随企业数据中心规模化、复杂度、设备多样性的发展&#xff0c;运维也迎来史无前例的巨大挑战&#xff0c;运维的重要性被推向高点&#xff0c;对运维平台而言无疑是最好的时代&#xff0c;充分利用大数据和人工智能技术融合来解决实际问题&#xff0c;建立数据要素全周期管理…