Java 还是 C++?
Java 特别象 C++;由此很自然地会得出一个结论:C++似乎会被Java 取代。但我对这个逻辑存有一些疑问。 无论如何,C++仍有一些特性是Java 没有的。而且尽管已有大量保证,声称Java有一天会达到或超过C++的 速度。但这个突破迄今仍未实现(尽管Java 的速度确实在稳步提高,但仍未达到C++的速度)。此外,许多 领域都存在为数众多的 C++爱好者,所以我并不认为那种语言很快就会被另一种语言替代(爱好者的力量是 容忽视的。比如在我主持的一次“中/高级Java 研讨会”上,Allen Holub声称两种最常用的语言是Rexx 和COBOL)。 我感觉 Java 强大之处反映在与 C++稍有不同的领域。C++是一种绝对不会试图迎合某个模子的语言。特别是 它的形式可以变化多端,以解决不同类型的问题。这主要反映在象Microsoft Visual C++和Borland C++ Builder(我最喜欢这个)那样的工具身上。它们将库、组件模型以及代码生成工具等合成到一起,以开发视 窗化的末端用户应用(用于Microsoft Windows操作系统)。但在另一方面,Windows开发人员最常用的是 什么呢?是微软的 Visual Basic(VB)。当然,我们在这儿暂且不提VB 的语法极易使人迷惑的事实——即 使一个只有几页长度的程序,产生的代码也十分难于管理。从语言设计的角度看,尽管VB 是那样成功和流 行,但仍然存在不少的缺点。最好能够同时拥有 VB 那样的强大功能和易用性,同时不要产生难于管理的代 码。而这正是Java 最吸引人的地方:作为“下一代的 VB”。无论你听到这种主张后有什么感觉,请无论如 何都仔细想一想:人们对Java 做了大量的工作,使它能方便程序员解决应用级问题(如连网和跨平台 UI 等),所以它在本质上允许人们创建非常大型和灵活的代码主体。同时,考虑到 Java 还拥有我迄今为止尚未 在其他任何一种语言里见到的最“健壮”的类型检查及错误控制系统,所以Java 确实能大大提高我们的编程 效率。这一点是勿庸置疑的! 但对于自己某个特定的项目,真的可以不假思索地将 C++换成Java 吗?除了Web程序片,还有两个问题需要 考虑。首先,假如要使用大量现有的库(这样肯定可以提高不少的效率),或者已经有了一个坚实的C或 C++代码库,那么换成 Java 后,反映会阻碍开发进度,而不是加快它的速度。但若想从头开始构建自己的所 有代码,那么Java 的简单易用就能有效地缩短开发时间。 最大的问题是速度。在原始的 Java 解释器中,解释过的 Java 会比C慢上 20到 50倍。尽管经过长时间的发 展,这个速度有一定程度的提高,但和C比起来仍然很悬殊。计算机最注重的就是速度;假如在一台计算机 上不能明显较快地干活,那么还不如用手做(有人建议在开发期间使用Java,以缩短开发时间。然后用一个 工具和支撑库将代码转换成C++,这样可获得更快的执行速度)。 为使Java 适用于大多数Web 开发项目,关键在于速度上的改善。此时要用到人们称为“刚好及时”(JustIn Time,或JIT)的编译器,甚至考虑更低级的代码编译器(写作本书时,也有两款问世)。当然,低级代 码编译器会使编译好的程序不能跨平台执行,但同时也带来了速度上的提升。这个速度甚至接近 C和 C++。 而且Java 中的程序交叉编译应当比C 和 C++中简单得多(理论上只需重编译即可,但实际仍较难实现;其他 语言也曾作出类似的保证)。 在本书附录,大家可找到与Java/C++比较.对Java 现状的观察以及编码规则有关的内容。
package Com.TomTest; class TomTest_43 {
public static void main(String args[]){
String s1,s2;
s1=new String("we are students");
s2=new String("we are students");
System.out.println(s1.equals(s2));
System.out.println(s1==s2);
String s3,s4;
s3="how are you";
s4="how are you";
System.out.println(s3.equals(s4));
System.out.println(s3==s4);
}
}
Java 还是 C++?的更多相关文章
- Spark案例分析
一.需求:计算网页访问量前三名 import org.apache.spark.rdd.RDD import org.apache.spark.{SparkConf, SparkContext} /* ...
- 故障重现(内存篇2),JAVA内存不足导致频繁回收和swap引起的性能问题
背景起因: 记起以前的另一次也是关于内存的调优分享下 有个系统平时运行非常稳定运行(没经历过大并发考验),然而在一次活动后,人数并发一上来后,系统开始卡. 我按经验开始调优,在每个关键步骤的加入如 ...
- Elasticsearch之java的基本操作一
摘要 接触ElasticSearch已经有一段了.在这期间,遇到很多问题,但在最后自己的不断探索下解决了这些问题.看到网上或多或少的都有一些介绍ElasticSearch相关知识的文档,但个人觉得 ...
- 论:开发者信仰之“天下IT是一家“(Java .NET篇)
比尔盖茨公认的IT界领军人物,打造了辉煌一时的PC时代. 2008年,史蒂夫鲍尔默接替了盖茨的工作,成为微软公司的总裁. 2013年他与微软做了最后的道别. 2013年以后,我才真正看到了微软的变化. ...
- 故障重现, JAVA进程内存不够时突然挂掉模拟
背景,服务器上的一个JAVA服务进程突然挂掉,查看产生了崩溃日志,如下: # Set larger code cache with -XX:ReservedCodeCacheSize= # This ...
- 死磕内存篇 --- JAVA进程和linux内存间的大小关系
运行个JAVA 用sleep去hold住 package org.hjb.test; public class TestOnly { public static void main(String[] ...
- 【小程序分享篇 一 】开发了个JAVA小程序, 用于清除内存卡或者U盘里的垃圾文件非常有用
有一种场景, 手机内存卡空间被用光了,但又不知道哪个文件占用了太大,一个个文件夹去找又太麻烦,所以我开发了个小程序把手机所有文件(包括路径下所有层次子文件夹下的文件)进行一个排序,这样你就可以找出哪个 ...
- Java多线程基础学习(二)
9. 线程安全/共享变量——同步 当多个线程用到同一个变量时,在修改值时存在同时修改的可能性,而此时该变量只能被赋值一次.这就会导致出现“线程安全”问题,这个被多个线程共用的变量称之为“共享变量”. ...
- Java多线程基础学习(一)
1. 创建线程 1.1 通过构造函数:public Thread(Runnable target, String name){} 或:public Thread(Runnable target ...
- c#与java的区别
经常有人问这种问题,用了些时间java之后,发现这俩玩意除了一小部分壳子长的还有能稍微凑合上,基本上没什么相似之处,可以说也就是马甲层面上的相似吧,还是比较短的马甲... 一般C#多用于业务系统的开发 ...
随机推荐
- asp.net页面生命周期之页面的终结阶段
处理过回发事件之后,页面便为浏览器生成输出做好了准备.呈现阶段分为两部分:预呈现和标记生成.预呈现这个子阶段有两个事件表征,分别为:预处理和投递处理. PreRender事件 通过处理该事件,页面和控 ...
- css颜色大全
本文来自:http://www.cnblogs.com/axing/archive/2011/04/09/CSS.html CSS颜色代码大全: FFFFFF #DDDDDD #AAAAAA #888 ...
- Nginx安装学习使用具体记录
前言:选择Nginx的长处:Nginx 能够在大多数 Unix like OS 上编译执行.并有 Windows 移植版. Nginx 的1.4.0稳定版已经于2013年4月24日公布.普通情况下,对 ...
- iOS_Xcode怎样准确定位到产生异常的出错代码
当应用程序出现异常而导致崩溃时, 可能光标仅仅提示异常出如今主函数代码处,例如以下图所看到的: 这样的情况下.即使看了日志. 也可能仍不清楚详细是哪一句代码产生了异常. 因此,须要手动设置异常断点. ...
- python求pi的方法
来自 #_*_ coding=utf-8 *_* ## {{{ http://code.activestate.com/recipes/578130/ (r5) def pi(places=10): ...
- java 学习总结
1 cobertura-maven-plugin maven的测试覆盖率插件集成cobertura-maven-plugin2 intelli J 配置VM参数 3 配置显示行号 mvn clean ...
- JDBC数据库编程:callableStatement接口
了解MySQL存储过程建立, 了解存储过程中参数传递的三种方式 了解callablestatement调用存储过程操作. 因为在现在开发中,使用存储过程的地方越来越少,所以,对于存储过程使用,只需要了 ...
- Mysql报错......\xE6\x80\xBB\xE7\x9B\x91' for column...
Mysql添加表中字符报错:Incorrect string value: '\xE6\x80\xBB\xE7\x9B\x91' for column 'postName' at row 1 原因:字 ...
- 解疑 Numpy 中的 transpose(转置)和swapaxes(两个轴转置变换)
1.一维和二维数据 .T等同于.transopse 2.三维及更多维数据 对于 z 轴 与 x 轴的变换 In [40]: arr = np.arange(16).reshape((2, 2, 4)) ...
- .Net程序员面试 每个人都应知道篇 (回答Scott Hanselman的问题)
昨天回答了Scott Hanselman在他清单上关于C#那部分的题目,.Net 程序员面试 C# 语言篇 (回答Scott Hanselman的问题),今天接着回答他在清单上列出的"每个写 ...