NET真的一定比JAVA快吗?

简介: 我不记得我是在哪篇文章上看过,说在Windows上.net的速度一定会比Java写的程序快.但是没留心过,也以为肯定是这样的.

我不记得我是在哪篇文章上看过,说在Windows上.net的速度一定会比Java写的程序快.但是没留心过,也以为肯定是这样的.刚好这几天研究.net上的StringBuilder,准备和Java的StringBuffer比较以下速度的时候,突然发现JDK5.0中居然也多出个StringBuilder类出来,呵呵.于是给它们3个都进行了次比较.
因为考虑JIT的影响所以取了10次时间差再取平均值来比较.

 

先看看它们3个在各自的文档中如何定义的:

.net StringBuilder

String 对象是不可改变的。每次使用 System.String 类中的方法之一时,都要在内存中创建一个新的字符串对象,这就需要为该新对象分配新的空间。在需要对字符串执行重复修改的情况下,与创建新的 String 对象相关的系统开销可能会非常昂贵。如果要修改字符串而不创建新的对象,则可以使用 System.Text.StringBuilder 类。例如,当在一个循环中将许多字符串连接在一起时,使用 StringBuilder 类可以提升性能。

java StringBuilder

一个可变的字符序列。此类提供一个与 StringBuffer 兼容的 API,但不保证同步。该类被设计用作 StringBuffer 的一个简易替换,用在字符串缓冲区被单个线程使用的时候(这种情况很普遍)。如果可能,建议优先采用该类,因为在大多数实现中,它比 StringBuffer 要快。

java StringBuffer

线程安全的可变字符序列。一个类似于 String 的字符串缓冲区,但不能修改。虽然在任意时间点上它都包含某种特定的字符序列,但通过某些方法调用可以改变该序列的长度和内容。

java和.net用的分别是Date与DateTime来获得时间差,所以这2个类的关键方法在这也有必要提到一下

java Date.getTime()

getTime

public long getTime()
返回自 1970 年 1 月 1 日 00:00:00 GMT 以来此 Date 对象表示的毫秒数。

返回:
自 1970 年 1 月 1 日 00:00:00 GMT 以来此日期表示的毫秒数。

.net DateTime.Ticks

public long Ticks {get;}属性值

表示此实例的日期和时间的刻度数。该值介于 MinValueMaxValue 之间。

备注

此属性的值为自 0001 年 1 月 1 日午夜 12:00 以来所经过时间以 100 毫微秒为间隔表示时的数字。


好了一返回的是毫秒一个返回的是微妙,所以知道毫秒与微妙之间的转化也是有必要的

1秒=1000毫秒(ms) 1毫秒=1/1,000秒(s)
1秒=1,000,000 微秒(μs) 1微秒=1/1,000,000秒(s)
1秒=1,000,000,000 纳秒(ns)
1纳秒=1/1,000,000,000秒(s)
1秒=1,000,000,000,000 皮秒(ps)

String 对象是不可改变的。每次使用 System.String 类中的方法之一时,都要在内存中创建一个新的字符串对象,这就需要为该新对象分配新的空间。在需要对字符串执行重复修改的情况下,与创建新的 String 对象相关的系统开销可能会非常昂贵。如果要修改字符串而不创建新的对象,则可以使用 System.Text.StringBuilder 类。例如,当在一个循环中将许多字符串连接在一起时,使用 StringBuilder 类可以提升性能。

java StringBuilder

一个可变的字符序列。此类提供一个与 StringBuffer 兼容的 API,但不保证同步。该类被设计用作 StringBuffer 的一个简易替换,用在字符串缓冲区被单个线程使用的时候(这种情况很普遍)。如果可能,建议优先采用该类,因为在大多数实现中,它比 StringBuffer 要快。

java StringBuffer

线程安全的可变字符序列。一个类似于 String 的字符串缓冲区,但不能修改。虽然在任意时间点上它都包含某种特定的字符序列,但通过某些方法调用可以改变该序列的长度和内容。

java和.net用的分别是Date与DateTime来获得时间差,所以这2个类的关键方法在这也有必要提到一下

java Date.getTime()

getTime

public long getTime()
返回自 1970 年 1 月 1 日 00:00:00 GMT 以来此 Date 对象表示的毫秒数。

返回:
自 1970 年 1 月 1 日 00:00:00 GMT 以来此日期表示的毫秒数。

.net DateTime.Ticks

public long Ticks {get;}属性值

表示此实例的日期和时间的刻度数。该值介于 MinValueMaxValue 之间。

备注

此属性的值为自 0001 年 1 月 1 日午夜 12:00 以来所经过时间以 100 毫微秒为间隔表示时的数字。


好了一返回的是毫秒一个返回的是微妙,所以知道毫秒与微妙之间的转化也是有必要的

1秒=1000毫秒(ms) 1毫秒=1/1,000秒(s)
1秒=1,000,000 微秒(μs) 1微秒=1/1,000,000秒(s)
1秒=1,000,000,000 纳秒(ns)
1纳秒=1/1,000,000,000秒(s)
1秒=1,000,000,000,000 皮秒(ps)

C#程序:返回的时间是毫秒

using System;
using System.Text; 
 class Class1{ 
  public static void Main(string[] args) {   
   
   StringBuilder s=new StringBuilder();
   double[] tosum=new double[10];
   DateTime d1=new DateTime();
   DateTime d2=new DateTime();
   for (int j=0;j<=9;j++)
   {
    d1=DateTime.Now;
    for (int i=0;i<=40000;i++)
     s.Append("Append");
    d2=DateTime.Now;
    tosum[j]=d2.Ticks -d1.Ticks;
   }
   
   double sum=0;
   for (int j=0;j<=9;j++)
   {
    sum=sum+tosum[j];    
   }
  
   Console.WriteLine("StringBuilder消耗的时间:"+sum/100); //取平均值与转化单位
   }
 }

结果:

 

java程序 :返回毫秒

import java.util.*;
class EString { 
   public static void main(java.lang.String[] args) { 
   
   
   StringBuilder s=new StringBuilder();
   double[] tosum=new double[10];    
   
   for (int j=0;j<=9;j++){
    Date d1=new Date();
    for (int i=0;i<=40000;i++)
     s.append("Append");
    Date d2=new Date();
    tosum[j]=d2.getTime()-d1.getTime();
   }
   
   double sum=0;
   for (int j=0;j<=9;j++){
    sum=sum+tosum[j];    
   }
  
   System.out.println("StringBuilder消耗的时间:"+sum/10);  
   
  
   
   StringBuffer sb1=new StringBuffer(); 
   for (int j=0;j<=9;j++){
    Date test1=new Date();   
    for (int i=0;i<=40000;i++)
     sb1.append("Append");
    Date test2=new Date();   
    tosum[j]=test2.getTime()-test1.getTime();
   }
   
   sum=0;
   for (int j=0;j<=9;j++){
    sum=sum+tosum[j];    
   }
  
   System.out.println("StringBuffer消耗的时间:"+sum/10);
   }
}

 

结果:

对于这样的结果。我不想在说什么了……

目录
相关文章
|
6月前
|
Java C# 开发者
【干货】Java开发者快速上手.NET指南
【干货】Java开发者快速上手.NET指南
|
4月前
|
开发框架 安全 Java
.net和java有什么样的区别?
Java和.NET在本质、编程语言、生态系统与工具、跨平台性、应用领域、性能与效率以及安全性与可靠性等方面都存在明显的区别。选择哪个平台取决于具体的需求、技术栈和目标平台。
310 7
|
5月前
|
Java C# 数据安全/隐私保护
|
Java
已解决Java.net.MalformedURLException异常的有效方法java.net.MalformedURLException: no protocol异常处理
已解决Java.net.MalformedURLException异常的有效方法java.net.MalformedURLException: no protocol异常处理
630 0
|
Java C# C++
【从Java到C#系列 四】从java到.net 核心
【从Java到C#系列 四】从java到.net 核心
100 0
|
存储 Java 编译器
【从Java到C#系列 三】从java到.net 高级
【从Java到C#系列 三】从java到.net 高级
78 0
|
开发框架 IDE Java
【从Java到C#系列 二】从java到.net 基础
【从Java到C#系列 二】从java到.net 基础
106 0
|
JavaScript Java
十、.net core(.NET 6)搭建ElasticSearch(ES)系列之Java环境搭建和Node.js环境搭建
安装java jdk环境:我此处使用的是jdk16版本。下载地址:https://www.oracle.com/java/technologies/javase-jdk16-downloads.html然后运行,直接默认都是下一步进行安装:
173 0
十、.net core(.NET 6)搭建ElasticSearch(ES)系列之Java环境搭建和Node.js环境搭建
|
安全 数据安全/隐私保护
Glide显示不出图片,监听报javax.net.ssl.SSLHandshakeException: java.security.cert.CertPathValidatorException:
Glide框架是当前比较流行的图片加载框架,使用起来也很简单,肯定有人在使用的时候加载不出图片的,情况有多种,下面讲一下加载不出来捕获到的Exception:javax.net.ssl.SSLHandshakeException: java.security.cert.CertPathValidatorException: 。出现这种情况基本上都是加载https出现的
931 0
Glide显示不出图片,监听报javax.net.ssl.SSLHandshakeException: java.security.cert.CertPathValidatorException:
|
Java 程序员 C#
【.Net vs Java? 】 看一看二者的类有多像?(一)
【.Net vs Java? 】 看一看二者的类有多像?
418 0
【.Net vs Java? 】 看一看二者的类有多像?(一)