Java新手,前来喷Java

Athenacle_ 2011-09-05 10:41:59
rt,顺带散散技术分

本人Java新手。目前大三,学Java,大一学的C,大二自学的C++;混迹CSDN C/C++板块也快一年了。
最近新学Java,跟老师上课,看到如下代码

byte b;
b = 10;
b = b * 10;

编译器竟然报错?。。。丢失精度?
个人一直觉得这种问题应该是由程序员来负责的,编译器、语言只需要具体的执行就行了,为什么Java会报错?语言层面个人觉得不需要考虑这么细节的问题把,,

还有啊,这个Java的编译速度也太那个什么了把?一直觉得C++是编译最慢的,结果突然发现这个javac(版本:1.6.0_27)也太慢太慢了把,,

我一直以为C++是以编译速度来换取运行速度。额。。那Java呢?不知道Java的运行速度到底怎样。C++版前几天有帖子说Java的IO性能的确比C++好,但是各位Java版的大大们能不能告诉我Java的整体性能到底怎么样啊?个人认为C++是直接运行在OS上的,而Java代码则是运行在JVM上,解释运行,JDK只不过在编译成字节码的时候对代码进行了优化,从而比纯粹的解释语言快。这样的话,我觉得就总体性能来说,Java还是是比不过C++,各位大大给我你们的解释把,谢了

从百度中翻出好多年前帖子:http://topic.csdn.net/t/20041211/18/3636713.html 里面都是各种专业喷子+吵架的

额,接上文,若C++比Java快的话,为什么Java还是最流行的语言啊?总是排列在编程语言排行榜的第一名。我电脑上似乎除了作为IDE的NetBeans之外就没什么Java的程序了,我们都知道Java有一个很出众的优点就是跨平台运行,,额,,个人认为挺鸡肋的。。。在运行的机器上还要装JRE。。。。


顺带问个问题:

有没有哪位列一个Java的学习书籍列表啊?
还有就是,我们想知道C++编译器在程序员背后做了什么,都可以从汇编代码看出来,Java中有没有类似汇编码的东东啊?字节码,看不懂诶,,,

诶呀,Java木有指针好纠结啊的确减少了错误,诶,,,,


========================================我是分割线==================================================
1.我纯粹是以Java新手的身份来发这个帖子的,有什么
2.我的标题虽说是来喷的,但是我只不过在C/C++的角度来看Java。。有些迷惑不解,,求Java版的人士以专业观点解释哈,表来喷我,我很无辜的
...全文
6685 237 打赏 收藏 转发到动态 举报
写回复
用AI写文章
237 条回复
切换为时间正序
请发表友善的回复…
发表回复
coolhty 2012-03-24
  • 打赏
  • 举报
回复
需要2005运行环境的程序,如果不装2005编译器,也会报错吧?这算不算鸡肋?
ryantao2010 2012-03-24
  • 打赏
  • 举报
回复
拿分,上面各位高人都把我的话说完了
Spy 2012-03-23
  • 打赏
  • 举报
回复
Java 的基理我还不懂
普凡 2012-03-23
  • 打赏
  • 举报
回复
byte相计算的时候如果不进行强制转换,都会编译错误的,因为:byte类型运算的时候会自动转换为int类型
JieTouLangRen 2012-03-23
  • 打赏
  • 举报
回复
Java和C++各有各的长处,没有最好的语言,只有最合适的语言!
Java比C++慢,这是不用质疑的了!
Java的开发效率挺高的!
Jaya1989 2012-03-23
  • 打赏
  • 举报
回复
2B青年
jyqj99 2012-03-23
  • 打赏
  • 举报
回复
一道竞赛题
有如下程序,完成的功能为:找出数组中的最大元素。请填写程序的中空白,使程序运行正确。

public class test
{
public static void main(String[] args) {
int array[]={0,34,67,90,21,-9,98,1000,-78};
System.out.println(new test().findMax (array, 0));
}
public int findMax(int array[],int index)
{
if(array==null || array.length==0)
{
return 0;
}
int max=array[0];
if(index<array.length-1)
{
max=____________________
}
if(max<array[index]) max= array[index];

return max;
}
}

Payden 2012-03-23
  • 打赏
  • 举报
回复
强制转型问题
lijun13038896168 2012-03-23
  • 打赏
  • 举报
回复
看下java的核心技术吧
蜗牛都玩F1 2012-03-23
  • 打赏
  • 举报
回复
学点东西再来发帖吧,不要人云亦云了
xws19900513 2012-03-23
  • 打赏
  • 举报
回复
这样
byte b;
b = 10;
b = (byte) ((byte)b * 10);
或者把b定义成int类型就可以了


你的第三句话默认为是int类型,byte不能自动转换为int,第一种方法是强制转换才行
Firebirds 2012-03-23
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 zhouyuqwert 的回复:]

新手飘过
b*10等价于 (int)b*10
最后返回int类型 int类型比byte类型大 所以编译报错
[/Quote]

正解
结贴是美德 2012-03-23
  • 打赏
  • 举报
回复
jf~~~~~~~~~~~
kkkygm 2012-03-23
  • 打赏
  • 举报
回复
楼主可以看下 java 教程之类的 b = 10 直接将byte 强转为int 型了 这叫自动向上转化(具体转化规则 按照8大类型看)
yuxuejun1123 2012-03-23
  • 打赏
  • 举报
回复
唉。。。java支持窄类型向宽类型转换,但是宽类型转向窄数据类型由于精度的丢失是不允许的,除非加上(byte)强制一下,否则就会抛出异常
a394773734 2012-03-23
  • 打赏
  • 举报
回复
又是忽悠人的
Keleesy 2012-03-23
  • 打赏
  • 举报
回复
byte b;
b = 10;
b = b * 10;
举个例子来说byte相当于一个碗,int相当于一个桶,现在你要将一个桶的东西(b * 10)放到一个碗(b)里面去,虽然你(b*10)不到一碗的东西,但是程序不知道啊,所以你要将桶里面的东西放到碗里去,你就得告诉碗它能不能装下桶里面的东西(b*10),所以正确的是b=Byte.parseByte((b*10+""),Byte.parseByte相当于你强制的把桶里面的东西(b*10),放到碗(b)中去,当碗(b)放不下你桶中的东西(b*10)时,程序就会报java.lang.NumberFormatException错。
fw347969680 2012-03-22
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 zhouyuqwert 的回复:]

新手飘过
b*10等价于 (int)b*10
最后返回int类型 int类型比byte类型大 所以编译报错
[/Quote]

前几天刚看到java5认证里面也有这样的题目。
hgj3867982 2012-03-22
  • 打赏
  • 举报
回复
超出值了·····常用int型的··
孤雨 2012-03-22
  • 打赏
  • 举报
回复
个人喜爱 还不如好好想想乌龟和兔子谁跑的快
加载更多回复(208)

62,612

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧