| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 676 人关注过本帖
标题:一个小问题
只看楼主 加入收藏
项目经理
Rank: 1
等 级:新手上路
帖 子:50
专家分:0
注 册:2005-8-29
收藏
 问题点数:0 回复次数:2 
一个小问题
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 
2005-09-09 08:10
kai
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:52
帖 子:3450
专家分:59
注 册:2004-4-25
收藏
得分:0 
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编辑过]



自由,民主,平等,博爱,进步.
中华民国,我的祖国,中华民国万岁!中华民国加油!
本人自愿加入中国国民党,为人的自由性,独立性和平等性而奋斗!
2005-09-10 00:12
项目经理
Rank: 1
等 级:新手上路
帖 子:50
专家分:0
注 册:2005-8-29
收藏
得分:0 
谢谢!!问题已解决!

偶现在还是一只小菜鸟,希望以后可以飞的更高~~
2005-09-10 08:54
快速回复:一个小问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.033902 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved