Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/398.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么我可以将一个字符传递给一个接受int的方法?_Java - Fatal编程技术网

Java 为什么我可以将一个字符传递给一个接受int的方法?

Java 为什么我可以将一个字符传递给一个接受int的方法?,java,Java,但是,如果我将方法更改为static void go(byte),则会出现错误:类型示例中的方法go(byte)不适用于参数(char)。隐式类型转换只允许加宽而不允许缩小。 int可以隐式类型转换为long,但不能反向转换。为此,您必须使用显式类型转换int可以容纳32位,而char只有16位。它隐式地转换为int而不丢失任何准确性 但是,一个字节只能容纳8位,因此您需要明确声明要使用(byte)c对其进行转换。较大的char值可能会被缩减为较小的值。这是由于扩大转换或隐式强制转换造成的。 如

但是,如果我将方法更改为static void go(byte),则会出现错误:类型示例中的方法go(byte)不适用于参数(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

现在谈到

但是,如果我将方法更改为static void go(byte),则会给出错误: 类型示例中的方法go(byte)不适用于 参数(字符)

这是由于缩小了转换范围

如果将更宽(更大)数据类型的值转换为 一种较窄(较小)的数据类型,可能导致数据丢失 信息,称为缩小转换。这是不可能的 由JVM隐式执行,并且需要显式强制转换。例如 双精度数据类型显式转换为整数

由于char
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);