Java 为什么我可以将一个字符传递给一个接受int的方法?
但是,如果我将方法更改为static void go(byte),则会出现错误:类型示例中的方法go(byte)不适用于参数(char)。隐式类型转换只允许加宽而不允许缩小。Java 为什么我可以将一个字符传递给一个接受int的方法?,java,Java,但是,如果我将方法更改为static void go(byte),则会出现错误:类型示例中的方法go(byte)不适用于参数(char)。隐式类型转换只允许加宽而不允许缩小。 int可以隐式类型转换为long,但不能反向转换。为此,您必须使用显式类型转换int可以容纳32位,而char只有16位。它隐式地转换为int而不丢失任何准确性 但是,一个字节只能容纳8位,因此您需要明确声明要使用(byte)c对其进行转换。较大的char值可能会被缩减为较小的值。这是由于扩大转换或隐式强制转换造成的。 如
int可以隐式类型转换为long,但不能反向转换。为此,您必须使用显式类型转换int可以容纳32位,而char只有16位。它隐式地转换为int而不丢失任何准确性
但是,一个字节只能容纳8位,因此您需要明确声明要使用
(byte)c
对其进行转换。较大的char值可能会被缩减为较小的值。这是由于扩大转换或隐式强制转换造成的。
如果将较窄(较小大小)数据类型的值转换为
在不丢失信息的情况下,更广泛(更大)的数据类型是
称为加宽转换。这是由JVM和
也称为隐式铸造。例如,整数数据类型是
直接转换为双精度
示例
Class Example{
static void go(int a)
{
System.out.println(a);
}
public static void main(String[] args) {
go('c'); //prints 99
}
}
在上面的示例中,整数(4字节)
转换为双精度(8字节)
在以下情况下允许加宽转换:
- 字节可以转换为short、int、long、float或double
- Short可以转换为int、long、float或double
- 字符可以转换为int、long、float或double
- int可以转换为long、float或double
- long可以转换为float或double
- float可以转换为double
16位
,而字节是8位
,因此必须像这样显式强制转换:
int a = 100;
double b = a;
System.out.println(b);
字符
为16位,而字节
为8位。也就是说,您可以将一个字符转换为bye(您丢失了数据):go((byte)'c')代码>但我看不出这样做有什么价值。@SarveshKumarSingh我想OP是在尝试学习Java。让我们帮忙吧,不要吝啬。@dimo414我明白,这就是我说的原因。。。我在编程方面指导过很多人,我观察到他们中的大多数人都会尝试走捷径。。。这样他们就可以在短期内“让代码运行”。。。他们试图避免在试图理解语言的过程中出现更无聊的部分。。。这对他们有害,而且从长远来看只有他们。我只是想提醒他们回到理解“无聊”的概念上来。。。让代码工作并不是一切。一个告诉我去“学习java”的导师是一个我最好没有的导师。
char c='c';
byte b=(byte)c;
go(b);