-1
public class Tester {
    public Tester(){
        System.out.println("Hello");
    }

    public Tester(byte b){
        System.out.println("byte");
    }

    public Tester(int i){
        System.out.println("int");
    }

    public static void main(String[] args) {
        Tester test=new Tester(12);
    }
}

请告知为什么打印的是int,我也尝试了其他整数,它们都打印为int,但是例如,1 2 3 4 5 6 7....这些数字也可以称为字节,对吗?那么为什么只调用 int 呢?

4

3 回答 3

5

默认情况下它将接受为 int 除非您将其类型转换为字节

如果要获取字节,请执行以下操作

Tester test=new Tester((byte)12);

输出字节

于 2013-10-19T03:54:32.310 回答
2

“如果整数文字以字母 L 或 l 结尾,则它的类型为 long;否则,它的类型为 int。”

因此,您12是一个int.

它继续说:“整数类型 byte、short、int 和 long 的值可以从 int 文字创建。” 例如:

byte b = 100;
short s = 10000;

然而100and10000总是类型int。它们恰好与其他类型的分配兼容。

于 2013-10-19T03:55:37.230 回答
1

的默认类型12int,所以它选择int构造函数。

要调用byte构造函数显式转换是必需的。

但如果我删除 :public Tester(int i){ System.out.println("int"); },它也不会打印字节,而是有错误

如果您删除int构造函数,那么编译器将无法找到任何合适的构造函数来调用,因此会出错。

于 2013-10-19T03:58:51.647 回答