为什么需要指定数据类型?

时间:2020-09-03 09:57:30

标签: java

我所说的是从编码方式的绝对起点开始的不到一周的时间(如果正确的话,不到4天)。 所以,这是我的问题。我制作了一个类User,然后给了它一些变量(很抱歉,如果我的编写方式很随意并且不像编程那样)。

public class User 
{
    String name;
    short age;
    int height;

然后我创建了一些构造函数。那就是其中之一:

public User(String name,short age,int height) {
    this.name=name;
    this.age=age;
    this.height=height;
    System.out.println(name);
    System.out.println("Age: "+age);
    System.out.println("Height: "+height);
    System.out.println();
}

然后,在main方法中,我使类User的主题具有指定的大量变量:

public static void main(String[] args) {
    User user1=new User("Dan",20,190);
}

但是当我运行程序时,出现一个错误,提示没有任何(String,int,int)类型的构造函数。同时,如果写入(short),即指定数据类型,则programm可以工作。 Java为什么将与short要求的金额类型匹配的数字视为int

2 个答案:

答案 0 :(得分:1)

Java数字文字位于int处,因此20是int,不会隐式转换为short(某些初始化除外)。

然后,编译器正在寻找一种将至少个int作为第二个参数的方法。您的定义最多接受 个短裤(shortint中的严格子集)。然后,编译器将呼叫拒绝为未解决。

在编写(short)20时,您命令编译器将32位int缩短为16位short的值。太危险了(某些int值可以表示为shorts)以使其隐式创建,因此您需要自己编写并执行转换(前提是您知道自己在做什么)。

答案 1 :(得分:0)

编译器错误告诉您年龄不是short类型,(除非您另行告诉,否则它会自动将年龄设为int

尝试一下,用这种方式告诉编译器您的年龄是short

public static void main(String[] args)
    {

        String name = "Dan";
        short age = 20;
        int height = 190;
        User user1=new User(name,age,height);
}
相关问题