2008-09-18 51 views
7

Tôi đã học Java ở trường đại học và sau đó tôi được một cửa hàng C# thuê và đã sử dụng từ đó. Tôi đã dành tuần đầu tiên của tôi nhận ra rằng hai ngôn ngữ đã gần như giống hệt nhau, và hai tháng tiếp theo tìm ra những khác biệt nhỏ. Đối với hầu hết các phần, tôi đã nhận thấy những điều mà Java đã có mà C# không, và do đó đã được chủ yếu là thất vọng. (ví dụ: các loại enum là các lớp chính thức, không chỉ là các số nguyên với một lớp sơn mới) Tôi đã đến để đánh giá cao thế giới C#, nhưng tôi không thể nói rằng tôi biết Java đủ tốt để thực sự tương phản cả hai vì vậy tôi rất tò mò để có được một mặt cắt ngang cộng đồng.So sánh C# và Java

Giá trị và điểm yếu tương đối của C# và Java là gì? Điều này bao gồm mọi thứ từ cấu trúc ngôn ngữ đến các IDE có sẵn và phần mềm máy chủ.

+0

+1; Không hiểu tại sao câu hỏi này có 3 phiếu bầu xuống! –

+0

+1; câu hỏi tuyệt vời, thực sự cần thêm phiếu bầu! – Shire

Trả lời

8

So sánh và đối chiếu ngôn ngữ giữa hai ngôn ngữ có thể khá khó khăn, giống như nhiều thư viện liên quan mà bạn sử dụng kết hợp với ngôn ngữ thể hiện những lợi thế khác nhau của nhau.

Vì vậy, tôi sẽ cố gắng ra khỏi danh sách như nhiều điều tôi có thể nhớ hoặc đã được đăng tải và lưu ý người mà tôi nghĩ có lợi thế:

  1. phát triển GUI (dày hay mỏng). C# được kết hợp với .NET hiện là lựa chọn tốt hơn.
  2. Ràng buộc nguồn dữ liệu tự động. C# có một khách hàng tiềm năng mạnh mẽ với LINQ, cũng có vô số thư viện phần thứ ba cũng cung cấp cho các cạnh
  3. kết nối SQL. Java
  4. Tự động đấm bốc. Cả hai ngôn ngữ đều cung cấp, nhưng C# Properties cung cấp một thiết kế tốt hơn cho nó liên quan đến người định cư và getters
  5. Chú thích/thuộc tính. Thuộc tính C# là một triển khai mạnh mẽ và rõ ràng hơn
  6. Quản lý bộ nhớ - Java VM trong tất cả các thử nghiệm tôi đã thực hiện vượt trội so với CLR
  7. Thu gom rác - Java là một chiến thắng rõ ràng khác tại đây. Mã không được quản lý với khung công tác C# /. NET khiến cho đây là một cơn ác mộng, đặc biệt là khi làm việc với GUI.
  8. Generics - Tôi tin rằng hai ngôn ngữ cơ bản gắn ở đây ... Tôi đã nhìn thấy những điểm tốt cho thấy hai bên là tốt hơn. Cảm giác ruột của tôi là Java là tốt hơn, nhưng không có gì logic để dựa trên nó. Ngoài ra tôi đã sử dụng C# generics ALLOT và Generics Java chỉ một vài lần ...
  9. Liệt kê. Java tất cả các cách, C# thực hiện được borked như xa như tôi đang quan tâm.
  10. XML - Toss up here. XML và khả năng serialization bạn nhận được với .NET tự nhiên đánh bại những gì bạn nhận được với eclipse/Java ra khỏi hộp. Nhưng có rất nhiều thư viện cho cả hai sản phẩm để trợ giúp về XML ... Tôi đã thử một vài và chưa bao giờ thực sự hài lòng với bất kỳ sản phẩm nào trong số đó. Tôi đã mắc kẹt với bản địa C# XML kết hợp với một số thư viện tùy chỉnh mà tôi tự tạo và tôi đã quen với nó, vì vậy khó có thể so sánh nó ở mức này ...
  11. IDE - Eclipse tốt hơn Visual Studio cho công việc không phải GUI. Vì vậy, Java thắng cho GUI không phải là GUI và Visual Studio giành cho GUI ...

Đó là tất cả các mục mà tôi không thể nghĩ ra cho thời điểm này ... Tôi chắc chắn bạn có thể chọn hàng trăm mục để so sánh và đối chiếu cả hai. Hy vọng rằng danh sách này là một mặt cắt ngang của các tính năng được sử dụng phổ biến hơn ...

2

Một điều khác cần ghi nhớ, bạn cũng có thể muốn so sánh các máy ảo tương ứng của chúng.

So sánh CLR và Java VM sẽ cung cấp cho bạn một cách khác để phân biệt giữa hai.

Ví dụ, nếu thực hiện đa luồng nặng, máy ảo Java có mô hình bộ nhớ mạnh hơn so với CLR (tương đương của .NET).

6

Điều này chưa được thực hiện cho đến chết? Vào cuối ngày, nó không phải là công cụ quan trọng, nhưng những gì bạn làm với họ.

+0

Thực ra, nếu bạn đang so sánh một dự án cụ thể, nó không được thực hiện cho đến chết. So sánh chung (flamewars) là vô ích, nhưng hai khác nhau. Hiểu được sự khác biệt sẽ là chìa khóa để biết khi nào nên sử dụng cái kia (khi cả hai đều là những lựa chọn thực tế). – therealhoff

+1

Tôi không chắc chắn những gì "đã" có nghĩa là - nó chưa được ghi lại ở đây. Và nếu các công cụ không quan trọng, điều đó có nghĩa là bạn không phiền khi viết các ứng dụng web trong FORTRAN? –

+1

Không cố gắng để được snarky, chỉ cần chỉ ra rằng các công cụ làm vấn đề. Chúng không phải mọi thứ, nhưng chúng cũng không có gì. –

2

C# có giao diện đồ họa tốt hơn với WPF, một cái gì đó mà Java có truyền thống kém.

C# có LINQ khá tốt.

Nếu không, 2 thực tế là giống nhau - bạn nghĩ chúng tạo ra thư viện lớp lớn như thế nào một cách nhanh chóng khi .NET xuất hiện lần đầu tiên? Mọi thứ đã thay đổi một chút kể từ đó, nhưng về cơ bản, C# có thể được gọi là MS-Java.

4

Một điểm khác biệt là C# có thể làm việc với Windows tốt hơn. Nhược điểm của việc này là nó không hoạt động tốt với bất cứ điều gì nhưng Windows (ngoại trừ có thể với Mono, mà tôi chưa thử).

1

Đừng coi đây là bất cứ điều gì nhiều hơn ý kiến, nhưng cá nhân tôi không thể chịu được GUI của Java. Nó chỉ đủ gần với Windows nhưng không hoàn toàn, do đó, nó được vào một khu vực thung lũng kỳ lạ, nơi nó chỉ thực sự khó chịu với tôi.

C# (và các ngôn ngữ Net khác, tôi cho là) ​​cho phép tôi tạo các chương trình hòa trộn hoàn hảo với Windows và điều đó làm tôi hài lòng.

Tất nhiên, đó là tranh luận nếu chúng ta không nói về việc phát triển một ứng dụng máy tính để bàn ...

0

Java:

  • Enums trong Java kick ass rất nhiều, nó thậm chí không buồn cười.
  • Java hỗ trợ chung sai

C#:

  • C# không còn giới hạn cho Windows (Mono).
  • Việc thiếu từ khóa trong Java khá thất vọng.
0

Bạn nói:

loại enum mà các lớp học chính thức, không chỉ là số nguyên với một lớp sơn mới

Bạn đã thực sự nhìn vào sản lượng? Nếu bạn biên dịch một ứng dụng với enums vào thì hãy đọc CIL, bạn sẽ thấy rằng enum thực sự là một lớp niêm phong bắt nguồn từ System.Enum.

Công cụ như Red-Gate (trước đây là Lutz Roeder's) Reflector sẽ tháo rời nó càng gần C# gốc càng tốt để có thể không dễ dàng nhìn thấy những gì đang thực sự xảy ra dưới mui xe.

+0

Từ spec ASP.Net 3.0: "Mỗi loại enum có kiểu tích phân tương ứng được gọi là kiểu cơ bản của kiểu enum." Vâng, chúng là các lớp học. Nhưng bạn có thể sắp xếp chúng vào và từ int và bạn không thể xác định các thành viên của chúng. Họ là những lớp học bao bọc đơn giản - họ là ints với một chiếc áo khoác mới của sơn. –

0

Như Elizabeth Barrett Browning đã nói: Làm thế nào để yêu anh? Hãy để tôi tính cách.

Vui lòng giải thích khía cạnh định tính (so với định lượng) của bài đăng này.

So sánh 2 ngôn ngữ này (và thời gian chạy liên quan của chúng) rất khó. So sánh có thể ở nhiều cấp độ và tập trung vào nhiều khía cạnh khác nhau (chẳng hạn như phát triển GUI được đề cập trong các bài viết trước đó). Ưu tiên giữa chúng thường là cá nhân và không chỉ kỹ thuật.

C# ban đầu được dựa trên Java (và CLR trên JRE) nhưng, IMHO, nói chung, vượt xa Java về các tính năng, tính biểu cảm và tiện ích của nó. Được kiểm soát bởi một công ty (so với một ủy ban), C# có thể tiến nhanh hơn so với Java có thể. Sự khác biệt giữa các phiên bản và dòng chảy qua các phiên bản với Java thường bắt kịp (chẳng hạn như việc bổ sung lambdas gần đây vào Java mà C# đã có trong một thời gian dài). Cả hai ngôn ngữ đều không phải là siêu tập hợp của tất cả các khía cạnh khác vì cả hai đều có các tính năng (và foibles) thiếu khác.

So sánh chi tiết từng bên có thể mất vài trăm trang. Nhưng mạng của tôi là đối với hầu hết các công việc lập trình liên quan đến kinh doanh hiện đại, chúng tương tự về quyền lực và tiện ích. Sự khác biệt quan trọng nhất có lẽ là tính di động. Java chạy trên hầu như tất cả các nền tảng phổ biến, C# chỉ chạy chủ yếu trên các nền tảng dựa trên Windows (bỏ qua Mono, vốn không được thành công rộng rãi). Java, vì tính di động của nó, được cho là có một cộng đồng nhà phát triển lớn hơn và do đó hỗ trợ nhiều khung thư viện và khung bên thứ ba hơn.

Nếu bạn cảm thấy cần phải lựa chọn giữa chúng, tiêu chí tốt nhất của bạn là nền tảng bạn quan tâm. Nếu tất cả công việc của bạn sẽ chỉ chạy trên các hệ thống Windows, IMHO, C#/CLR, với ngôn ngữ phong phú hơn và khả năng tương tác trực tiếp với các API gốc của Windows, là một người chiến thắng rõ ràng. Nếu bạn cần tính di động của hệ thống chéo thì Java/JRE là một người chiến thắng rõ ràng.

PS. Nếu bạn cần nhiều kỹ năng việc làm di động hơn, thì IMHO Java cũng là một người chiến thắng.