Loading [MathJax]/jax/input/TeX/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >java中int和char转换_java 二维数组

java中int和char转换_java 二维数组

作者头像
全栈程序员站长
发布于 2022-08-02 05:55:04
发布于 2022-08-02 05:55:04
1K00
代码可运行
举报
运行总次数:0
代码可运行

大家好,又见面了,我是你们的朋友全栈君。

引言

在介绍java中int与char之间的互相转化之前,让我们先简单的回顾一些会涉及到的知识。

数据类型

在介绍int与char的转换之前,我们先来回顾一下java中的基本数据类型:

类型

大小

包装器类型

boolean

Boolean

char

16-bit

Character

byte

8 bits

Byte

short

16 bits

Short

int

32 bits

Integer

long

64 bits

Long

float

32 bits

Float

double

64 bits

Double

ascii码

其次,我们要知道,在计算机中,所有的数据在存储和运算时都要使用二进制数表示,例如,像a、b、c、d这样的字母以及各种符号,还有作为字符的数字,都要使用二进制数字来表示,因此需要一种二进制码与这些字符的对应关系。

而现在普遍遵守的对应关系就是ASCII编码,在这里贴几个字母的ascii码作为我们的测试对象:

ascii码(十进制)

字符

97

‘a’

98

‘c’

99

‘d’

100

‘e’

更多的ascii码的对应关系可以在这个链接里看到:更多ascii码

int与char的互相转换

在引言中,我们可以看到,int类型是一个32位的数据类型,因为其位有符号数,所以,其取值范围为:-2^31 至 2^31 – 1。

char为16位的数据,为无符号数,其范围为:0 至 2 ^ 16 -1,即 0 – 65535,用十六进制码来看,则为:’\u0000’ – ‘\uffff’。

再从前面引言中对于ascii码的描述,我们可以看出,无论是什么字符,在计算机中,其实也是以数字(本质为一个二进制数)的形式存储的,因此,在java中,无论是一个字符,还是一个字符型变量,实则也是一个数字,所以,可以直接将一个(不超过char的范围的)数字赋值给一个char变量,即可输出其结果:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
char c1 = 97;
System.out.println(c1);

输出:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
a

可以看到,正确输出了97的ascii码所对应的字符:‘a’。

同样的,我们可以将一个字符赋值给一个int变量,因为字符也是一个数字嘛

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
int num1 = 'a';
System.out.println(num1);

输出:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
97

甚至,我们可以将一个数字与一个字符在一个表达式中进行计算:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
char c2 = 'a' + 1;
int num2 = 'a' + 1;
System.out.println("c2: " + c2);
System.out.println("num2: " + num2);
System.out.println("(char) num2: " + (char) num2);

输出:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
c2:          b
num2:        98
(char) num2: b

因为字符’b’所对应的ascii码是98,比’a’所对应的97要大1,所以,将’a’加1之后,得到的便是字符’b’了。同时,将int型的num2直接进行强制转换,也可以得到所期望的’b’。

可能出现的错误

从上面一节的描述,我们可以看出,char与int之间的转换还是相当容易的,但是,也有几点需要注意,否则,会导致程序中的错误。

从引言中的基本数据类型的回顾中,我们可以看出,int是比char范围更大的,因此,这些错误主要便是会出现在从int转到char的过程中。

char的大小过界

由于char是一个16位的无符号的数据类型,所以其大小范围是:0 至 2 ^ 16 -1,即 0 – 65535,用十六进制码来看,则为:’\u0000’ – ‘\uffff’。

虽然我们可以直接以一个数字赋给一个char型的变量,但是,若我们赋的值的大小大于了65536,则会报出错误来,如下代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
char c3 = 65535;
System.out.println(c3);
char c4 = 65536;
System.out.println(c4);

输出:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Error:(33, 19) java: 不兼容的类型: 从int转换到char可能会有损失

报错是报在了上面代码中的第3行,即char c4 = 65536,这一行,因此,当对一个char类型赋值的时候,要注意,所赋的值不能超过了65535。

将int变量直接赋给char变量

在上面,我们看到了,可以直接将一个数字赋值给char类型的变量,那是不是我们可以直接将一个int类型的变量赋给一个char类型的变量呢?

答案是否定的,这里,涉及到隐式转换与显式转换的知识。简单地来讲,就是只能从一个范围较小的数字转换到一个范围较大的数字,如32位的int类型到64位的long是可以隐式转换的,即可以直接把一个int类型的变量赋给一个long类型的变量。

类似的,我们可以直接把一个16位的char类型的变量赋给一个32位的int类型的变量,但是,反之便不可以,需要用显式转换。

首先给出一个反例如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
int num5 = 97;
char c5 = num5;

我这里,本地用的IDE是IDEA,在写下这段代码的时候,就已经标红,报出了错误,提示信息为incompatible types, Required: char, Found: int,即类型不匹配,而如果我们直接运行,或者用javac来编译的话,都会报出如下的错误:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Error:(34, 19) java: 不兼容的类型: 从int转换到char可能会有损失

而如果我们先初始化一个char型的变量c6,将这个变量赋给一个int型的变量呢?

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
char c6 = 97;
int num6 = c6;
System.out.println("c6: " + c6);
System.out.println("num6: " + num6);

输出:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
c6:   a
num6: 97

是可以正确地输出的,也可以看出从char到int是可以隐式转换的。

如果我们确实需要char型到int型的话,需要显式的强制转换:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
int num7 = 97;
char c7 = (char) num7;
System.out.println(c7);

输出:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
a

这里,由于是强制转换,将一个较多位数的类型转换成一个较少位数的类型,因此,可能会有损失发生,若int的数字大于65535,则会丢弃16位以外的数字,如下例:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
int num8 = 65536 + 97;
char c8 = (char) num8;
System.out.println(c8);

// 打印num8与c8的十六进制输出
System.out.println(Integer.toHexString(num8));
System.out.println(Integer.toHexString(c8));

输出:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
a
10061
61

可以看到,num8的十六进制表示为0x0001 0061,直接将第一个字节丢弃,变为0x0061,即97,对应的字符为’a’。

一些技巧

在上面,我们看到了,char其实也是一个数字,所以,可以利用这样的特性,在编程的时候,使用一些小技巧。

比如,有一个字符为'1',我们想将其变为数字1,或者,我们想将一个int类型的数字1转换为字符'1',这时,我们就可以这样写:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// '1' -> 1
char c9 = '1';
int num9 = c9 - '0';

// 1 -> '1'
int num10 = 1;
char c10 = (char)(num10 + '0');

同样的,如果我们想用1 – 26来表示字母’a’ 到 ‘z’ ,也可以用类似的方法来表示。

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/125204.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022年4月1,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Java 语法基础
由于Java是强类型语言,因而在进行某些整型、浮点型、字符型数据的混合运算中需要进行类型转换。不同类型的数据先转化为同一类型,然后进行运算。
星姮十织
2021/12/25
3140
【C/C++教学】关于char,我们来聊一聊
刚刚发现,原来微信公众号的推文还可以用markdown写。激动得我赶紧装个13冷静一下(逃。不过话说回来,说到char这个东西,可能也是让很多新手朋友难(dan)受(ten)不已的东西。那么char和一般的变量类型又有什么区别呢?今天来一起聊聊。By the way, 0x表示16进制,再问......先看看下面的例子吧
短短的路走走停停
2019/05/14
6740
【02】JAVASE-Java基础语法【从零开始学JAVA】
Java 是第一大编程语言和开发平台。它有助于企业降低成本、缩短开发周期、推动创新以及改善应用服务。如今全球有数百万开发人员运行着超过 51 亿个 Java 虚拟机,Java 仍是企业和开发人员的首选开发平台。
用户4919348
2024/05/25
1660
【02】JAVASE-Java基础语法【从零开始学JAVA】
常量&变量习题答案
张哥编程
2024/12/13
1180
常量&变量习题答案
计算机程序的思维逻辑 (8) - char的真正含义
看似简单的char 通过前两节,我们应该对字符和文本的编码和乱码有了一个清晰的认识,但前两节都是与编程语言无关的,我们还是不知道怎么在程序中处理字符和文本。 本节讨论在Java中进行字符处理的基础 - char,Java中还有Character, String, StringBuffer, StringBuilder等类进行文本处理,他们的基础都是char,我们在后续文章中介绍这些类。 char看上去是很简单的,正如我们在第2节所说,char用于表示一个字符,这个字符可以是中文字符,也可以是英文字符。赋值
swiftma
2018/01/31
6460
【day02】变量、数据类型转换、运算符
​ **注意:**当左移的位数n超过该数据类型的总位数时,相当于左移(n-总位数)位
程序员波特
2024/11/13
1080
【day02】变量、数据类型转换、运算符
Java基础第二天学习笔记
02.01_Java语言基础(常量的概述和使用)(掌握) * A:什么是常量 * 在程序执行的过程中其值不可以发生改变 * B:Java中常量的分类 * 字面值常量 * 自定义常量(面向对象部分讲) * C:字面值常量的分类 * 字符串常量 用双引号括起来的内容 * 整数常量 所有整数 * 小数常量 所有小数 * 字符常量 用单引号括起来的内容,里面只能放单个数字,单个字母或单个符号 * 布尔常量 较为特殊,只有true和false * 空常量 null(数组部分讲解)
Java学习
2018/04/17
7170
大数据必学Java基础(十二):基本数据类型
Java的数据类型可分为两大类:基本数据类型(primitive data type)和引用数据类型(reference data type)。
Lansonli
2022/07/06
3K0
大数据必学Java基础(十二):基本数据类型
Java 变量
变量相当于内存中一个数据存储空间的表示,你可以把变量看做是一个房间的门牌号,通过门牌号我们可以找到房间,而通过变量名可以访问到变量(值)。
用户9615083
2022/12/25
9910
Java 变量
JAVA 标识符 和 类型转换
​ 把一个表示数据范围小的数值或者变量赋值给另一个表示数据范围大的变量。这种转换方式是自动的,直接书写即可。例如:
Zkeq
2022/05/18
4690
JAVA 标识符 和 类型转换
Java基础篇Java基础语法
注释:就是对代码的解释和说明。其目的是让人们能够更加轻松地了解代码。为代码添加注释,是十分必须要的,它不影响程序的编译和运行。
程序员Leo
2023/08/07
8310
Java基础篇Java基础语法
Java学习笔记_零基础系列(六)Java八种数据类型(超详细)
其中byte,short,int,long,float,double,boolean,这7种类型计算机表示起来比较容易,因为他们都是数字。其中布尔类型只有两个值true和false,实际上true和false分别在C++中对应的是1和0,1为true,false为0。
牛仔码农
2021/07/12
3000
java如何把char型数据转换成int型数据(转)
一字符串,String=“2324234535”; 把第i个数取出来时是char型的:char temp=String.charAt(i) 如何把char型转换成int型? 我需要求个尾数之和,如:123的各位数之和为6.
用户7886150
2021/04/29
2.2K0
大数据技术之_16_Scala学习_02_变量
第二章 变量2.1 变量是程序的基本组成单位2.2 Scala 变量的介绍2.2.1 概念2.2.2 Scala 变量使用的基本步骤2.3 Scala 变量的基本使用2.4 Scala 变量使用说明2.4.1 变量声明基本语法2.4.2 注意事项2.5 Scala 程序中 +号 的使用2.6 Scala 数据类型2.6.1 scala 数据类型体系一览图2.6.2 scala 数据类型列表2.7 整数类型2.7.1 基本介绍2.7.2 整型的类型2.7.3 整型的使用细节2.8 浮点类型2.8.1 基本介绍2.8.2 浮点型的分类2.8.3 浮点型使用细节2.9 字符类型:Char2.9.1 基本介绍2.9.2 案例演示2.9.3 字符类型使用细节2.9.4 字符类型本质探讨2.10 布尔类型:Boolean2.11 Unit 类型、Null 类型和 Nothing 类型2.11.1 基本说明2.11.2 使用细节和注意事项2.12 值类型转换2.12.1 值类型隐式转换2.12.2 自动类型转换细节说明2.12.3 高级隐式转换和隐式函数2.12.4 强制类型转换2.13 值类型转换练习题2.14 值类型和 String 类型的转换2.14.1 介绍2.14.2 基本数据类型转 String 类型2.14.3 String 类型转基本数据类型2.14.4 注意事项2.15 标识符的命名规范2.15.1 标识符概念2.15.2 标识符的命名规则(要记住)2.15.3 标识符举例说明2.15.4 标识符命名注意事项2.15.5 Scala 关键字2.16 作业01
黑泽君
2019/04/09
1.4K0
大数据技术之_16_Scala学习_02_变量
java基础语法
注释是对代码的解释和说明文字,可以提高程序的可读性,因此在程序中添加必要的注释文字十分重要。Java中的注释分为三种:
剑走天涯
2019/08/23
7570
java基础语法
JAVA基础语法-学习笔记
首先呢,我们创一个后缀名为java的文件,而后写入内容 其次,我们以管理员身份打开cmd,通过javac运行来得到class文件 最后,通过java命令来将刚刚生成的clss文件运行 这就是整个过程,图示如下图所示
用户9691112
2023/05/18
9470
JAVA基础语法-学习笔记
Java基础(二):八种基本数据类型详解
)约 6~7 位十进制有效数字0.0fFloatdouble64约±1.7e308(
Java微观世界
2025/06/12
2420
Java基础(二):八种基本数据类型详解
Java基础 - 入门
JAVA不采用通常语言使用的ASCII字符集,而是采用unicode这样的标准的国际字符集
断痕
2021/01/21
9430
Java基础 - 入门
Java语法手册 一
变量名命名规则 (可以中文^^,但别用!可以装逼~,后面你会知道中午乱码是有多头疼):
Java_慈祥
2024/08/06
2030
Java语法手册 一
《JavaSE》---4.<基础语法(Java四类八种基本数据类型&四种引用数据类型与变量)>
public、class以及static等颜色会发生变化,将这些具有特殊含义的标识符称为关键字。
用户11288958
2024/09/24
1900
《JavaSE》---4.<基础语法(Java四类八种基本数据类型&四种引用数据类型与变量)>
相关推荐
Java 语法基础
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验