Java 将char传递给具有int参数的方法
以下代码的输出是Java 将char传递给具有int参数的方法,java,type-conversion,Java,Type Conversion,以下代码的输出是123,因为substring从beginIndex到EndIndex-1。然而,我很惊讶这里的char被理解为3(int),因为substring需要两个int。这背后的概念是什么 String x = "12345"; char a = 3; x = x.substring(0, a); System.out.println(x); 这可以追溯到,char本质上是一个窄整数类型,并在必要时隐式转换为int 在Java中,这在技术上被称为“扩展原语转换”,并在中进行了介绍。因
123
,因为substring
从beginIndex到EndIndex-1。然而,我很惊讶这里的char
被理解为3(int),因为substring
需要两个int。这背后的概念是什么
String x = "12345";
char a = 3;
x = x.substring(0, a);
System.out.println(x);
这可以追溯到,
char
本质上是一个窄整数类型,并在必要时隐式转换为int
在Java中,这在技术上被称为“扩展原语转换”,并在中进行了介绍。因此子字符串的函数声明类似于子字符串(intstartindex,intendindex)。
现在,当您传递char时,它会自动升级为整数(endIndex),因此被视为int。请看一节,其中讨论了加宽转换。这称为隐式转换。如果将int值赋给double,也会发生同样的情况。 快速示例
double d = 1;
1是一个
int
,但它被隐式转换为double
(1.0)。其他人已经解释了它工作的原因,但请注意,使用char变量作为索引是一种不好的做法,因为它们具有不同的关联语义,因此使用char作为索引会令人困惑
仅在存储字符数据时使用字符,可能更好:尽量避免使用字符,因为字符宽度甚至不足以存储每个字符(请参阅Unicode和代码点讨论)。使用int来存储字符代码点。在
字符a=3
,您可以将其视为存储二进制值3的0011
。字符“3”实际上没有被存储:如果您尝试处理的是一个字符,则不会得到3
。但如果你这么做了
chara='3'代码>
现在您存储的是char 3,ascii值为51,如果您尝试在int中使用它,您将得到51。从技术上讲,这是因为char
是int
的一个子类型
为了确定子字符串(int,int)
是否适用于参数(int,char)
,我们首先尝试,我们需要测试char
是否是int
的子类型,是的
然后,为了将char
参数指定给int
参数per,我们应用,它将char
转换为int
,per这是隐式和显式强制转换的概念。
字符是小数据类型,然后是整数,因此当将字符作为值传递时,它会自动将字符值转换为int值
public static void age (int num){
System.out.println(num);
}
char character = '2';
age(character); output is 50.
字符形式“0”到“9”打印值为48到57+1。。归根结底,它不是将char
看作一个字母或字符,而是计算机能够映射到字母或字符的一段数据。然后,为了简化这个过程,我们制作了一些快捷方式,让我们直接将字母或字符分配给char
s(比如char c='x';
的意思是“由变量c表示的一段数据是映射到字符'x'的值”。“变量'c'与系统中的任何其他数据段相比都不是一个字母。)