Saya mungkin harus beralih ke Jawa untuk proyek baru. Saya memiliki sedikit pengetahuan tentang Java, karena saya terutama belajar dan menggunakan C #, dan saya takut perbedaan antara dua bahasa / platform ini cenderung menyebabkan saya banyak masalah.
Apa perangkap / gotcha yang harus saya pedulikan?
Jawaban:
Berikut adalah beberapa gotcha Java penting ketika berasal dari C #:
switch
case dapat secara diam-diam masuk ke yang berikutnya, jadi pastikan Anda selalu meletakkannyabreak
kapan saja sesuai. Anda juga tidak bisaswitch
diString
di Jawa.List<int>
, hanya aList<Integer>
. Autoboxing menyembunyikan verbosity, tetapi Anda bisa dapatkanNullPointerException
ketika unboxing anull
. Juga,==
dan!=
pada dua tipe primitif kotak melakukan perbandingan referensi.==
dan!=
pada dua jenis referensi (mis.String
) selalu perbandingan referensiint
dapat diautobox keInteger
; tidak ada autoboxing dariint[]
keInteger[]
.byte
,short
,int
,long
ditandatangani saja. Perhatikan ekstensi tanda yang tidak diinginkan.sub*
metode kueri rentang menggunakan batas bawah inklusif dan batas atas eksklusifString.substring(int beginIndex, int endIndex)
CharSequence.subSequence(int start, int end)
List.subList(int fromIndex, int toIndex)
SortedSet<E>.subSet(E fromElement, E toElement)
SortedMap<K,V>.subMap(K fromKey, K toKey)
Lihat juga
Pertanyaan-pertanyaan Terkait
Pada beberapa topik yang tercantum di atas:
new Integer(i) == i
di Jawa? (IYA!)==
/!=
) apakah terjadi pembatalan otomatis? (TIDAK!)int num = Integer.getInteger("123")
melemparNullPointerException
? (!!!)Pada Gotchas Jawa umum:
sumber
Salah satu perangkap yang jelas adalah membandingkan string dengan gaya C #
string1 == string2
(Java membandingkan hanya referensi) daripada gaya Javastring1.equals(string2)
.Satu lagi adalah itu
private
adalah pengubah akses default di C #,package
di Jawa.Juga
ToString()
metode tidak secara otomatis dilokalisasi oleh budaya saat ini di Jawa.sumber
Salah satu yang membuat saya adalah argumen Java substring adalah beginIndex, endIndex sementara C # Subtring args adalah startIndex, panjang. Itu perbedaan yang cukup untuk membuatnya menjengkelkan dan kemungkinan bagus untuk mendapatkan indeks keluar dari batas baik cara Anda beralih.
sumber
Hm
sumber
sumber
Meta-pitfall terbesar adalah mengasumsikan bahwa bahasa Jawa dan perpustakaan berperilaku sama dengan hal-hal yang mirip di C #. Lakukan tutorialnya, baca javadocs, jangan anggap ...
Meta-pitfall lain adalah dengan menganggap bahwa fakta bahwa Anda dapat melakukan sesuatu di Jawa sama mudah / sebaik yang Anda bisa / bisa di C #. Itu tidak benar. Java adalah bahasa yang jauh lebih tua, dan kesalahan dibuat ...
Dan meta-pitfall terakhir adalah berpikir bahwa mengeluh tentang hal-hal yang hilang / berbeda di Jawa pada SO akan membuat Anda mendapatkan respons yang simpatik / mendukung secara universal!
sumber
Waspadai perbedaan pengubah akses default. Perhatikan juga bahwa semua metode non-statis di Java adalah virtual (kecuali jika Anda menandainya sebagai final).
Meskipun agak ketinggalan zaman, saya menemukan ini sebagai referensi yang bagus.
Perbandingan C # dan Java, oleh Dare Obasanjo
sumber
Also note that all non-static methods in Java are virtual.
Betapa aku berharap C # juga seperti initergantung pada program apa yang sedang Anda kerjakan. Wikipedia memiliki artikel ini dan ini cukup luas. (lihat juga bagian "tautan eksternal" di bagian akhir) http://en.wikipedia.org/wiki/Comparison_of_Java_and_C_Sharp .
Juga, saya membaca artikel ini ketika saya beralih dari C # ke Java http://www.25hoursaday.com/CsharpVsJava.html dan itu sangat berguna.
sumber
Saya pikir pertanyaan Anda subjektif. Semua tidak bisa dijelaskan di sini. Saya sarankan Anda untuk membaca Java Puzzlers , By
Joshua Bloch and Neal Gafter
. Anda dapat belajar lebih banyak dan aman dari perangkap.sumber
Dalam bahasa Jawa, ekuivalen objektif dari tipe primitif seperti int, char, bukan "tipe nilai" (misalnya Integer adalah tipe referensi). Dalam C # System.Int32 adalah struktur.
sumber