在一个类中有两个方法
一个是:
private int getSomething(byte b)
{
    return b;
}这个在编译时候会报错。而下面这个public double getSomething()
{
    return 2;
}
这个编译不会报错。我疑惑的地方
第一个不能通过编译,因为类型不匹配。
但是第二个常量数值2,这个时候它没有写成 2.0。按道理来说应该判定为int型,应该也是类型不匹配,但是为什么不会出现编译报错呢?
对于 这样的常量数值 2,java到底如何去判定它真正属于的数据类型?

解决方案 »

  1.   

    return 2  把常量2赋值给double类型 可以    
    return b  把变量b赋值给不同的数据类型int  错你要弄明白楼上的为什么给这个例子  
      

  2.   

    谢谢楼上的,
    这样的测试我做过了。
    比较郁闷的private double getSomething(int b) 

        return b; 

     这样也可以通过编译。
    但是
    private int getSomething(byte b) 

        return b; 

    肯定不行我就想明白 为啥 int b  return b 这样不会出现类型不匹配的错误 会自动转换
    但是byte 就不能自动转换了 
    我想知道的为什么两个都是 低容量类型 转高容量类型 不能互转。
    而且在 java核心编程思想里面  byte都是放在 整型里面。
    所以我这里就跟不理解
      

  3.   

    private int getSomething(byte b)
    {
        return b;

    在我的编译器里不报错。
    不知道你用的什么编译器,错误信息是什么?
      

  4.   

    我也没看出问题。。byte做为int返回,应该可以的吧。。
      

  5.   

    我把整个完整的题目发出吧!
    我用的myeclips编译的。是我低年级的一个同学问我的。题目如下:给定如下java代码,下列()方法可以加入到Sample类中,并且能够编译正确的。(选二项)
        public class Sample{
           public int getSomething(int d){
              return d;
           }}A、 private int getSomething(int i,String s){};
    B、 public void getSomething(int i,String s){};
    C、 private int getSomething(byte b){return b};
    D、 public double getSomething(){return 2;};如果选二项  那肯定B是没错的  因为符合重载的定义也符合方法的定义。
    D 是也可以的。  但是我就在想如果D可以那应该C也应该可以啊! 但是C也可以的话 那这个题目就会有问题了。
    那就应该有三个对的,后来我就做了测试,我测试C的时候是报了错,我把错发上来。
    下面是报错的:
    Exception in thread "main" java.lang.Error: Unresolved compilation problem: 
    The method getSomenthing(byte) in the type ClassName is not applicable for the arguments (int) at ClassName.main(ClassName.java:44)
      

  6.   

    因为测试报错了, 所以我觉得一下子进入了一个迷茫的地方,所以就想明白,如果C 这个选项是错的,就想明白为什么是错的。
    不过看大家都在说c 没错 不过我这里没有调试出来 还是报的错。
    另外问下,       public class ClassName {

    public int getsomenthing(int d)
    {
    return d;
    }
    public int getSomenthing(byte b)
    {
    return b;
    }
    public static void main(String[] ager){
    ClassName a=new ClassName();
           //下面这里因为我们基本没用过byte类型的数值,说实话不知道那些是byte类型的,我就按取值范围 丢了120 System.out.println(a.getSomenthing(120)+"");
    System.out.println("hallo java");
    }


    }
      

  7.   

    不知道你的答案全不全,
    A、 private int getSomething(int i,String s){}; 不对因为没有返回类型。要加上returnC、 private int getSomething(byte b){return b}; 不对。return b后面没有;号。好了
    答案是B、D
      

  8.   

    你这么调用。
    System.out.println(a.getSomenthing((byte)120)+"");
      

  9.   

    public int getsomenthing(int d)
            {
                return d;
            }
            public int getSomenthing(byte b)
            {
                return b;
            }
            public static void main(String[] ager){
             BEAN a=new BEAN();
                    System.out.println(a.getsomenthing(8)+"");
             System.out.println(a.getSomenthing((byte) 111)+"");
                
            }
    没有错误
      

  10.   

    private int getSomething(byte b) 

        return b; 

    没有错误啊!