2008-12-03 9 views
5

में सरल चर मैं कुछ matrials में इस वाक्य देखा:जावा और सी ++

"जावा में, इस तरह पूर्णांक और चार के रूप में सरल डेटा प्रकार बस सी में के रूप में काम"

मुझे आश्चर्य है कि वास्तव में वे जावा & सी ++ में अलग हैं?

सी ++ में, जावा में प्राइमेटिव जैसे सरल चर को स्मृति पता भी सौंपा गया है, इसलिए सी ++ में इन आदिम प्रकारों में भी एक पॉइंटर हो सकता है। हालांकि जावा में प्राइमेटिव्स को ऑब्जेक्ट्स जैसे स्मृति पते को असाइन नहीं किया गया है।

क्या मैं सही हूँ?

धन्यवाद!

+0

देखें http://stackoverflow.com/questions/564/what-is-the-difference-between-an-int-and-an-integer-in-javac – bradtgmurray

उत्तर

7

लगभग।

जावा प्राइमेटिव में स्मृति भी असाइन की जाती है, लेकिन यह आंतरिक रूप से होती है और आपको संदर्भ नहीं मिल सकता है।

स्मृति प्रबंधन पर सुरक्षा प्रदान करने का कारण था।

-1

प्राइमेटिव्स को स्टैक पर संग्रहीत किया जाता है और मूल्य से पारित किया जाता है।

int x = 5; 
int y = x; 

y++; 

// y = 6 
// x = 5 

वस्तुओं को ढेर पर संग्रहीत किया जाता है और संदर्भ द्वारा पारित किया जाता है।

Object a = new Object(); 
Object b = a; 

b.someAction(); 

// A and B point to the same object and both have had the 'someAction()' performed 

मुझे पता नहीं है अगर यह है कि आपके पूछ रहा है, लेकिन मैं ऊब रहा हूँ और कुछ पोस्ट करना चाहते हैं

+0

क्या आपके पास यह पीछे नहीं है? मैंने सोचा था कि प्राइमेटिव्स को स्टैक पर आवंटित किया जाता है। – bradtgmurray

+0

लॉल, ओह! हाँ। उसे संपादित। –

+0

ऑब्जेक्ट संदर्भ द्वारा पारित नहीं किए जाते हैं। ऑब्जेक्ट संदर्भ मान द्वारा पारित किया जाता है। Http://stackoverflow.com/questions/333151 देखें। इसके अलावा, प्राइमेटिव केवल स्टैक पर संग्रहीत होते हैं यदि वे स्थानीय चर होते हैं। –

0

जावा और सी ++ के बीच कुछ अंतर हैं जब यह सरल प्रकार की बात आती है । स्मृति आवंटन अलग है क्योंकि जावा स्पष्ट पॉइंटर्स और संदर्भों की अवधारणा को छुपाता है। आप बस सरल प्रकार बनाते हैं और एक मान असाइन करते हैं। एक और अंतर यह है कि जावा प्रत्येक साधारण प्रकार के चेक Java Simple Types के लिए मानकीकृत स्मृति पैरों के निशान का उपयोग करता है। दूसरी तरफ सी ++ उस मंच पर निर्भर है जिस पर इसे संकलित किया गया है। एक और बिंदु (और मुझे नहीं पता कि यह एक अंतर है या नहीं) यह है कि सरल प्रकारों में असाइनमेंट थ्रेड सुरक्षित है। मैंने सी ++ में कोई बहु-थ्रेडेड प्रोग्रामिंग नहीं किया है, इसलिए मुझे यकीन नहीं है कि यह एक विचार है।

+0

लंबे या दो बार असाइनमेंट अस्थिर नहीं हो सकता है जब तक अस्थिर (और तब भी कार्यान्वयन संभवतः तोड़ दिया जाता है)। परिवर्तन अन्य थ्रेडों के लिए स्वचालित रूप से दिखाई नहीं दे रहा है (जब तक अस्थिर फिर से नहीं)। ऐसे ++ ऑपरेशंस परमाणु नहीं हैं - परमाणु इंटेगर और दोस्तों का उपयोग करें। –

0

सबसे बुनियादी सामग्री के लिए, वे वही काम करते हैं, लेकिन विस्तार अंतरों का एक टन है।

  • वहाँ जावा में कोई अहस्ताक्षरित संख्यात्मक प्रकार के होते हैं (चार को छोड़कर, जो तकनीकी रूप से लेकिन शब्दार्थ संख्यात्मक नहीं)
  • जावा के "आदिम प्रकार" केवल ढेर पर रह सकते हैं (स्थानीय चर के रूप में) या वस्तुओं के अंदर ढेर पर , लेकिन सीधे ढेर पर नहीं।
  • चार प्रकार बहुत अलग है - सी में, यह एक बाइट (बाइट में 8 बिट्स हो सकता है) हो सकता है, जबकि जावा में, यह 16 बिट होने के लिए परिभाषित किया गया है।
0

सही।

जावा में आप एक प्राचीन प्रकार के संदर्भ (सूचक) को पास नहीं कर सकते हैं। // वास्तव में जावा में पॉइंटर्स जैसी कोई चीज़ नहीं है।

एक प्राचीन प्रकार केवल जावा में मूल्य द्वारा पारित किया जा सकता है। इसके चारों ओर एक रास्ता है, लेकिन आमतौर पर इसकी स्थिति तब तक अनुशंसा नहीं की जाती जब तक आपकी स्थिति इसकी मांग न करे। आप एक रैपर वर्ग का उपयोग कर सकते हैं। When to use wrapper class and primitive type

केवल वस्तुएं संदर्भ द्वारा पारित की जाती हैं।

स्टैक पर भी आदिम प्रकार आवंटित किए जाते हैं और ऑब्जेक्ट्स को ढेर पर आवंटित किया जाता है।