C # से जावा पर स्विच करें, जिसे "गोचैस" मुझे ध्यान देना चाहिए?


9

मुझे नई परियोजना के लिए जावा पर स्विच करना पड़ सकता है। मुझे जावा के बारे में बहुत कम जानकारी है, क्योंकि मैंने मुख्य रूप से C # का अध्ययन किया है और उसका उपयोग किया है, और मुझे इन दो भाषा / प्लेटफ़ॉर्म के बीच के अंतर से डर लगता है, जिससे मुझे कई समस्याओं का कारण बनना चाहिए।

मुझे कौन सी ख़राबियाँ / तकलीफें होनी चाहिए?


मुझे लगता है कि यह ब्लॉग बहुत सी चीजों को कवर करता है जिन्हें आप ढूंढ रहे हैं .. ericsink.com/entries/java_eclipse_2.html
हरी मेनन

3
C # और Java के बीच कई अंतर हैं और हर एक इस प्रश्न का संभावित "उत्तर" है। हालांकि, मुझे संदेह है कि यह आपके या दूसरों के लिए बहुत उपयोगी होगा। अधिक विशिष्ट, वास्तविक प्रश्न पूछने से अधिक उपयोगी उत्तर मिलेंगे। वैकल्पिक रूप से, (प्रभावी रूप से अंतहीन) मतभेदों के बजाय C # से जावा पर स्विच करने के लिए संदर्भ या गाइड के लिए पूछने का प्रयास करें ।

दूसरे शब्दों में, किसी विशेष समस्या के बारे में "क्यों" या "कैसे" प्रश्न पूछने का प्रयास करें । उदाहरण के लिए, संदर्भ, मार्गदर्शिका, या किताबें मांगना "मैं C # से जावा में कैसे स्विच कर सकता हूं" पूछने के समान है, या विशिष्ट कोड के बारे में पूछना जो आपको समझ में नहीं आता है "यह Y के बजाय X क्यों करता है" प्रश्न है।

इस समुदाय-विकी को बनाने पर विचार करें
जुआन

इन्हें भी देखें stackoverflow.com/questions/169815/java-common-gotchas
finnw

जवाबों:


36

C # से आने पर यहां कुछ महत्वपूर्ण जावा गोचर्स दिए गए हैं:

  • जावा में, switchमामले चुपचाप से अगले तक गिर सकते हैं, इसलिए सुनिश्चित करें कि आप हमेशा breakजब भी उपयुक्त हों। आप यह भी नहीं कर सकते हैं switchपर Stringजावा में।
  • जेनरिक केवल संदर्भ प्रकारों के साथ गैर-पुनरीक्षित और पैरामीटर करने योग्य हैं। नहीं है List<int>, केवल ए List<Integer>। ऑटोबॉक्सिंग क्रिया को छुपाता है, लेकिन आप अनबॉक्सिंग करते NullPointerExceptionसमय प्राप्त कर सकते हैं null। इसके अलावा, ==और !=दो बॉक्सिंग पर आदिम प्रकार संदर्भ तुलना करते हैं।
    • ... क्योंकि ==और !=दो संदर्भ प्रकार (जैसे String) हमेशा संदर्भ तुलना हैं
    • एक intकरने के लिए एक autoboxed किया जा सकता है Integer; वहाँ से कोई autoboxing int[]है Integer[]
  • जावा के byte, short( int, longकेवल हस्ताक्षरित हैं) अनजाने साइन एक्सटेंशन के लिए देखें।
  • कोई बहुआयामी सरणियाँ नहीं, केवल सारणी में सारणी की सारणी।
  • अधिकांश sub*रेंज किए गए क्वेरी विधियाँ समावेशी निचले बाउंड और अनन्य ऊपरी बाउंड का उपयोग करती हैं

यह सभी देखें

संबंधित सवाल

ऊपर सूचीबद्ध कुछ विषयों पर:

सामान्य जावा गोचरों पर:


8
अब आप स्ट्रिंग को जावा एसई 7.
मैल्कम

+1 जेनरिक के लिए केवल संदर्भ प्रकारों के साथ गैर-
पुनरीक्षित और परिचालनीय हैं

आपको यह भी जोड़ना चाहिए कि जावा में कोई संरचना नहीं है।

13

एक स्पष्ट गड़बड़ी string1 == string2जावा शैली के बजाय सी # शैली (जावा केवल संदर्भों की तुलना करती है) के साथ तार की तुलना कर रही है string1.equals(string2)

एक और है कि जावा privateमें C # में डिफ़ॉल्ट एक्सेस संशोधक है package

इसके अलावा ToString()जावा में वर्तमान संस्कृति द्वारा विधियां स्वचालित रूप से स्थानीय नहीं हैं।


यह इस तथ्य का एक विस्तार है कि कोई ऑपरेटर ओवरलोड नहीं है।
ग्रफिन

3
गलत। पैकेज-प्राइवेट जावा की डिफ़ॉल्ट एक्सेस संशोधक है।
ओलिवर वीलर

@ हेल्पर विधि: ओह, क्षमा करें। मेरा मतलब था कि C # डिफ़ॉल्ट के रूप में निजी था, लेकिन जावा नहीं। अब इसे संपादित किया गया है।

12

जो मुझे मिला था वह जावा सबस्ट्रिंग आर्ग्स थे, इयरइंडेक्स, एंडइंडेक्स जबकि सी # सबट्रांग आर्ग्स स्टार्टइंडेक्स , लंबाई। यह एक कष्टप्रद अंतर के लिए पर्याप्त है और इसे स्विच करने के तरीके की सीमा से बाहर सूचकांक प्राप्त करने की एक अच्छी संभावना है।


3
+1 अधिक भ्रामक तथ्य यह है, कि यह startIndex INCLUSIVE है और endIndex EXCLUSIVE ... और यह कि JDK में कुछ API पाए जाते हैं जो startIndex, लंबाई के दृष्टिकोण का उपयोग करते हैं ...
ओलिवर डायलर

10
  • आपको कोई LINQ नहीं मिलता है
  • आपको कोई अच्छा नहीं लगता - UI (कोई WPF नहीं)
  • कोई गुण नहीं
  • आप मिस्रियों को नाचते हुए देखिए
  • आपको उदाहरण और अच्छे प्रलेखन के बिना एपीआई मिलते हैं

हम्म।


2
जावा एपीआई को कभी भी खराब नहीं पाया गया (वास्तव में नेविगेट करने में आसान) लेकिन निश्चित रूप से कम उदाहरण हैं। यह मिस्रियों के बारे में क्या है?
ग्रफिन

3
मैं इसे उखाड़ रहा हूं ...... भले ही व्यंग्यात्मक कम झटका हो।
एमपीएन


8
क्या ये सच हैं? मैं कीड़े के संभावित कारणों के रूप में नुकसान को समझता हूं। ये सिर्फ ऐसी चीजें हैं, जिन्हें आपको किसी और तरीके से नहीं करना चाहिए।

2
@cloudanger: आपसे सहमत हूँ। नुकसान कुछ ऐसा होना चाहिए, जो गलत तरीके से "काम" करे, न कि ऐसा काम जो काम भी न करे।
विम्वक

10
  • जावा एनम एक तरह से अधिक शक्तिशाली / जटिल हैं, वे वास्तव में नामित पूर्णांक के बजाय वास्तविक कक्षाएं हैं।
  • जावा में आंतरिक वर्ग अधिक शक्तिशाली हैं (और वे अलग व्यवहार करते हैं)
  • कोई प्रतिनिधि नहीं, केवल कार्यात्मक वस्तुएं
  • कंस्ट्रक्टर चाइनिंग चीज़ की दोनों भाषाओं में एक पूरी तरह से अलग वाक्य रचना है, मैं हर बार असफल हो जाता हूँ जो मुझे c # में करना पड़ता है
  • जावा में इंटरफेस के लिए सबक्लासिंग और इम्प्लीमेंट्स का विस्तार है, जो काफी अच्छा है। सी # के बजाय एक नामकरण सम्मेलन पर निर्भर करता है जो कहता है कि इंटरफेस उनके नाम में एक अपरकेस I से शुरू होते हैं। मैं उस सम्मेलन को पसंद नहीं करता, क्योंकि मैं कभी सुनिश्चित नहीं हो सकता कि कोई और विफल हो जाए।
  • जावा ऑटोबॉक्सिंग आपको ** में काट सकता है
  • जावा प्रकार का क्षरण वास्तव में चीजों को और अधिक जटिल बनाता है

2
आप मजाक कर रहे हैं ठीक? -1, हालांकि। आप गंभीर नहीं हो सकते।

3
आपको कम से कम यह स्पष्ट करना चाहिए कि आपको कौन सी बात पसंद नहीं है, अन्यथा मुझे यह मानना ​​होगा कि आप सिर्फ ट्रोलिंग कर रहे हैं।
एटमान्रोमैन

2
अब आपका न केवल मजाक उड़ाया जा रहा है, बल्कि आप अनजान भी हैं: लिनक्स बैकएंड क्षेत्र में महत्वपूर्ण है, इन बेवकूफों की मदद से javadoc बहुत अधिक साफ है एमएस मदद फाइलें जो यदि आप नेटवर्क शेयरों से देखते हैं तो काम नहीं करेंगे। सैंडकास्टल लगभग दस्तावेज नहीं है और एक उचित गाई के बिना पूरी तरह से अनुपयोगी है। अधिकांश पीपीएल इस बात से सहमत होंगे कि जावा फ्रेमवर्क में बहुत अच्छा संग्रह है और जोशुआ ब्लूच ने वहां अच्छा काम किया है। और "एग्जहेड" किताबें सिर्फ किताबें हैं जिन्हें आप नहीं समझते हैं। एक्लिप्स एक भयानक आईडीई है जो वीएस खिचड़ी भाषा बाहरी प्लगइन्स के बिना खड़ा है। Btw: मुझे सी # पसंद है और जावा में लिनक याद आती है। अपने एमएस-ऑफिस-दुनिया से बाहर निकलो।
एटमन्रोमैन

1
इनमें से केवल एक आइटम एक
गोचा है

1
-1 मुझसे भी, आप नहीं जानते कि एक अच्छी विचारधारा क्या है (और इस तरह से संबंधित प्रोग्रामिंग की ज्यादा जानकारी नहीं है)। संपादित करें: Pftft Java अधिक परिपक्व है, जावा में वास्तविक जेनरिक भी नहीं है ..

6

सबसे बड़ी मेटा-पिटफॉल यह मान लेना है कि जावा भाषा और पुस्तकालय सी # में समान दिखने वाले सामान के समान व्यवहार करते हैं। ट्यूटोरियल करें, javadocs पढ़ें, मानें नहीं ...

एक और मेटा-ख़तरा ग्रहण करने के लिए है कि सच है कि आप जावा में कुछ कर सकते हैं कि समान रूप से के रूप में आसानी / अच्छी तरह से के रूप में आप / सी # में कर सकता है कर सकते हैं। यह सच नहीं है। जावा बहुत पुरानी भाषा है, और गलतियाँ की गईं ...

और अंतिम मेटा-पिटफॉल यह सोचने के लिए है कि एसओ पर जावा में सामान गायब / अलग होने की शिकायत आपको सार्वभौमिक रूप से सहानुभूति / सहायक प्रतिक्रिया मिलेगी!


3

डिफ़ॉल्ट पहुँच संशोधक में अंतर से सावधान रहें। यह भी ध्यान दें कि जावा में सभी गैर-स्थिर तरीके आभासी हैं (जब तक कि आप उन्हें अंतिम रूप में चिह्नित नहीं करते हैं)।

यद्यपि यह कुछ हद तक पुराना है, मैंने इसे एक महान संदर्भ पाया है।

डेयर ओबेसंजो द्वारा सी # और जावा की तुलना


3
Also note that all non-static methods in Java are virtual.मैं चाहता हूं कि सी # ऐसा ही हो
ग्रापिन

3
मुझे खुशी है कि यह नहीं है, क्योंकि यह OOP के कारण को नष्ट कर देता है। मूलभूत रूप से आभासी होने की प्रत्येक विधि के साथ आप मूल रूप से अपनी पूरी कक्षा को प्रतिस्थापित करने में सक्षम होते हैं, जिसे आप आमतौर पर नहीं चाहते हैं। इसके अलावा, गैर-फ़ाइनल से फ़ाइनल में एक विधि बदलने से व्युत्पन्न कोड टूट सकता है, जबकि दूसरा तरीका नहीं है।
फेमारेफ

2

इस पर निर्भर करता है कि आप किस तरह के कार्यक्रम पर काम कर रहे हैं। विकिपीडिया का यह लेख है और यह काफी व्यापक है। (अंत में "बाहरी लिंक" अनुभाग भी देखें) http://en.wikipedia.org/wiki/Comparison_of_Java_and_C_Sharp

जब मैंने C # से जावा http://www.25hoursaday.com/CsharpVsJava.html पर स्विच किया, तब भी मैंने इस लेख को पढ़ा और यह बहुत उपयोगी था।


0

मुझे लगता है कि आपका प्रश्न व्यक्तिपरक है। यहाँ सब नहीं समझाया जा सकता है। मैं आपको जावा पज़लर्स , बाय पढ़ने का सुझाव देता हूं Joshua Bloch and Neal Gafter। आप अधिक सीख सकते हैं और नुकसान से सुरक्षित हो सकते हैं।


सभी नुकसान नहीं, लेकिन जो नुकसान C # प्रोग्रामर के जावा में होने की संभावना है :)
Vimvq1987

1
@ Vimvq1987 - यह मानने का कोई कारण नहीं है कि जावा पर स्विच करने के बाद आप "जावा पज़लर्स" में नहीं चलेंगे।
स्टीफन सी

-1

जावा भाषा में आदिम प्रकार के उद्देश्य जैसे इंट, चार, "वैल्यू टाइप" नहीं हैं (उदाहरण के लिए इंटेगर एक संदर्भ प्रकार है)। C # में System.Int32 एक संरचना है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.