当前位置: 代码迷 >> Java相关 >> 一个小问题
  详细解决方案

一个小问题

热度:73   发布时间:2005-09-09 08:10:00.0
一个小问题
JAVA中
1.为什么不能编译 {int a = 1, b = 3;
                          int c;
                   c=a+++++b;}
2.java 是否有自动类型转换??我看过一本书说没有,可实际上是可以的;
3.class abc
{public static void main(String[] arg)

{double c;
c = Math.IEEEremainder(0.9,0.5);
//System.out.println("Math.IEEEremainder(0.9,0.5)");
// document.write(Math.abs(10));
System.out.println("IEEEremainder:"+c);}}
为什么编译总出错呢?

谢谢!!!
搜索更多相关的解决方案: public  double  JAVA  

----------------解决方案--------------------------------------------------------
class abc

{

  public static void main(String[] arg)

  {

    int a = 1, b = 3;

    int d;

    a++;

    a++;

    d=a+b;

    System.out.println(d);        



    double c;

    c = Math.IEEEremainder(0.9,0.5);

    System.out.println("Math.IEEEremainder(0.9,0.5)");

   

    System.out.println("IEEEremainder: "+c);

  }

}



回答你的3个问题:

1)
因为 a++++ 是不合法的写法。我想Java
的这样设置完全合理,可以让那些无聊的老师不要再来出这种问题,即便在C++中,这种写法也是绝对不可取的,因为
某个变量的++++的结果不取决于语言本身而是取决于操作系统,所以所得结果将不经相同。既然这样,Java干脆取消了这种写法的合法性。



2)
Java
中的类型转换有隐式转换和强制转换,这是一贯的理解,大多书上的解释如下:

      隐式转换:

         对于一元运算符(比如++, 或--), byte 类型的操作数或short 类型的操作数被转换成 int 类型,而其他的类型保持不变.

        对于二元运算符,
对于只包含整数类型的操作数,如果其中一个操作数是long, 那么其他的操作数也要转换成long 类型, 否则所有的操作数都被转换成 int
类型.表达式的结果是 int 类型,除非是产生的值非常大才使用 long  类型.
对于至少有一个是浮点类型操作数的情况,如果表达式中有一个操作数是 double 类型的,那么另一个操作数需要转换为 double 类型,
并且计算结果也是 double 类型的, 否则两个操作数被转换成 float 类型,并且结果也是float 类型的.

     强制转换:

        强制运算符是由括在括号里的类型名构成的. 他是放在操作数前面具有较高优先级的一元运算符,其结果是得到具有由强制指定的类型的变量,并具有原来对象的值.



但是我们来看下面的一段程序:

  class abc

  {

    public static void main(String[] arg)

    {

      double test = 9.6;

      int a = test;  // error

      a = test/3;    // error

        

      System.out.println("a: "+a);

    }

  }

  大家编译以后看看结果是什么, 我用的是JDK 1.5 在Dos下编译, 结果是不能通过, 那么是否能够说, Java
语言的机制有了改变, 由原来的隐式转换被允许到现在的不被允许了呢? 我个人认为是的, 我不觉得隐式转换有什么意义.
反而是一种隐患. 这种隐患便是数据失真,这种数据失真在大的程序中,由于不是语法,语义上错误,往往在程序在运行期才能发现,而即便发现也很难查找错
误的源头.  

要实现类型转换必须强制转换,这也是为了保证消除由于程序中的疏忽而导致数据失真的问题。C++中是允许类型自动转换的。但这也使得
程序具有潜在的隐患。

通过对强制转换的要求, 便能杜绝这种数据失真。



3)那段代码在我这里可以编译也可以运行,不过没有那两句注释行。

[此贴子已经被作者于2005-9-10 1:59:40编辑过]



----------------解决方案--------------------------------------------------------
谢谢!!问题已解决!
----------------解决方案--------------------------------------------------------
  相关解决方案