एक सरणी जावा में एक वस्तु है


93

जावा में हम एक ऐरे को घोषित कर सकते हैं

String[] array = new String[10]; 
int size = array.length; 

क्या इसका मतलब यह है कि सरणी अपने आप में एक वस्तु है? क्योंकि C ++ में एक सरणी सिर्फ एक सूचक है और इसमें कोई विधियाँ नहीं हैं।


5
नहीं, C ++ में एक सरणी एक सरणी है, और एक सरणी नहीं है।
केरेक एसबी

42
if (array instanceof Object) System.out.println("Yes!")
skaffman

6
ओह, और C ++ में, सरणियाँ और संकेत दोनों वस्तुएं हैं।
आर। मार्टिनो फर्नांडीस

2
@ R.MartinhoFernandes सभी C ++ सरणियाँ वास्तव में C ++ ऑब्जेक्ट्स हैं, लेकिन C ++ पॉइंटर्स हैं जो C ++ ऑब्जेक्ट्स नहीं हैं, अर्थात् सभी पॉइंटर्स जो एक रवैल्यू का मूल्यांकन करने का परिणाम हैं। उदाहरणों में शामिल हैं &x, p+iऔर new int(42)
fredoverflow

1
@skaffman संदेश कड़ाई से आवश्यक नहीं है, क्योंकि यह अन्यथा संकलित नहीं होगा।
शमोसल

जवाबों:


197

हाँ।

जावा भाषा विनिर्देश खंड 4.3.1 के साथ शुरू होता है:

एक वस्तु एक श्रेणी उदाहरण या एक सरणी है।


4
अब तक मुझे हमेशा लगता था कि एक वस्तु वर्ग के उदाहरण के साथ पर्याय बन गई थी और वह सरणियाँ एक विशेष भाषा विशेषता या कुछ और थीं।
Ruben9922

विस्तृत विवरण यहाँ दिया गया है: geeksforgeeks.org/array-primitive-type-object-java
garnet

60

हाँ; जावा भाषा विनिर्देश लिखते हैं :

जावा प्रोग्रामिंग भाषा में, सरणियाँ ऑब्जेक्ट्स (.34.3.1) हैं, गतिशील रूप से बनाई गई हैं, और उन्हें ऑब्जेक्ट (.34.3.2) के चर के लिए सौंपा जा सकता है। श्रेणी ऑब्जेक्ट के सभी तरीकों को एक सरणी पर लागू किया जा सकता है।


यदि सरणी एक वस्तु है, तो इसका मतलब यह नहीं है कि यह एक वर्ग का उदाहरण है? यदि हां, तो क्या मैं उस वर्ग का विस्तार कर सकता हूं?
एक दो तीन

9
नहीं, यह नहीं है: जावा कल्पना लिखती है : "एक वस्तु एक वर्ग उदाहरण या एक सरणी है। एक वर्ग उदाहरण स्पष्ट रूप से एक वर्ग उदाहरण सृजन अभिव्यक्ति (.915.9) द्वारा बनाया गया है। एक सरणी निर्माण अभिव्यक्ति द्वारा एक सरणी स्पष्ट रूप से बनाई गई है। ((15.10)। ”। और नहीं, आप एक सरणी का विस्तार नहीं कर सकते, क्योंकि फैली हुई खण्ड में एक क्लास टाइप की सुविधा होनी चाहिए
मैरिटन

36

खैर, जावा से पूछते हैं!

public class HelloWorld
{
  public static void main(String[] args)
  {
    System.out.println(args instanceof Object);
    int[] someIntegers = new int[] {42};
    System.out.println(someIntegers instanceof Object);
  }
}

आउटपुट:

true
true

1
आप int[] someIntegers = {42};परिणाम के लिए भी घोषित कर सकते हैं ।
होल्गर

7

हां, यह जावा में एक ऑब्जेक्ट है।

यह भी ध्यान दें कि जब आप ऐसा array.lengthकरते हैं तो आप किसी भी तरीके को लागू नहीं कर रहे हैं, लेकिन केवल सरणी के lengthक्षेत्र तक पहुंच बना रहे हैं । Arrays वर्ग में बहुत सारे स्टैटिक तरीके हैं ।


3

यह ध्यान रखना महत्वपूर्ण है कि जावा में सरणियों के अपने बाइट कोड हैं जो वे वस्तुओं के साथ साझा नहीं करते हैं। वे निश्चित रूप से ऑब्जेक्ट हैं, लेकिन निम्न स्तर पर थोड़ा अलग तरीके से संभाला जाता है।


2

मैं कहूंगा कि इसका उत्तर हां है, हालांकि मैं इसे जोड़ सकता हूं, कड़ाई से बोल रहा हूं, एक सरणी C ++ में भी एक वस्तु है। वर्तमान मानक (FDIS) के From1.8 [intro.object] से:

एक वस्तु भंडारण का एक क्षेत्र है।


2

मैं सिर्फ यह जोड़ना चाहता हूं कि सरणियों का प्रतिबिंब एपीआई में प्रतिनिधित्व है - java.lang.reflect.Array


1

जावा में हर सरणी एक वस्तु है int int [] a = नया int [2]; तो एक ऑब्जेक्ट बनाने के लिए नए का उपयोग किया जाता है और जैसा कि यह एक ऑब्जेक्ट है हम क्लास नाम की जांच सिर्फ a.getClass ()। GetName () का उपयोग करके कर सकते हैं;


1
  1. एक सरणी किसी भी वर्ग के पेड़ में सूचीबद्ध वर्ग का उदाहरण नहीं है, हालांकि प्रत्येक सरणी एक वस्तु है और सीधे से विरासत में मिली है java.util.Object
(new int[1]) instanceof Object   // -> evaluates to true
  1. वर्ग java.util.Arraysएक सहायक वर्ग है, और सरणियाँ इस वर्ग के उदाहरण नहीं हैं।
(new int[1]) instanceof java.util.Arrays    // -> compile error
  1. वर्ग java.lang.reflect.Arrayएक सहायक वर्ग है, और सरणियाँ इस वर्ग के उदाहरण नहीं हैं।
(new int[1]) instanceof java.lang.reflect.Array    // -> compile error
  1. Arrays के सभी सदस्यों को विरासत में मिलता है java.lang.Object

  2. Arrays clone()से विरासत में मिली विधि को ओवरराइड करता है Object

  3. एरे क्षेत्र को लागू करते हैं length, जिसमें सरणी के घटकों की संख्या होती है। लंबाई सकारात्मक या शून्य हो सकती है। यह है publicऔर final

  4. अंतराल इंटरफेस को लागू करते हैं Cloneableऔर java.io.Serializable

8a। Arrays द्वारा समर्थित हैं Class<T>। आप Class<T>एक सरणी उदाहरण से उदाहरण प्राप्त कर सकते हैं

(new int[2]).getClass()

या एक सरणी प्रकार से

int[].class

8b। java.lang.Class<T>आपके कोड में प्रत्येक भिन्न सरणी प्रकार के लिए एक अद्वितीय प्रतिबिंब वर्ग उदाहरण (उदाहरण के लिए ) बनाया जाता है। उदाहरण

int[].class.getCanonicalName()    //  -> "int[]"
String[].class.getCanonicalName() //  -> "java.lang.String[]" /
  1. दोहराने के लिए: Arrays ऑब्जेक्ट हैं लेकिन क्लास ट्री में किसी भी वर्ग के उदाहरण नहीं हैं।

प्रतिक्रिया दें संदर्भ

जावा विनिर्देशन खंड 4.3.1 वस्तुओं से

  • एक वस्तु एक श्रेणी उदाहरण या एक सरणी है।

  • एक वर्ग उदाहरण स्पष्ट रूप से एक वर्ग उदाहरण सृजन अभिव्यक्ति द्वारा बनाया गया है।

  • एक सरणी स्पष्ट रूप से एक सरणी निर्माण अभिव्यक्ति द्वारा बनाई गई है।

से java.util.Arrays

  • इस वर्ग में सरणियों में हेरफेर करने के लिए कई तरीके हैं (जैसे कि छांटना और खोजना)

से java.lang.reflect.Array

  • ऐरे वर्ग जावा सरणियों को गतिशील रूप से बनाने और उपयोग करने के लिए स्थिर तरीके प्रदान करता है।

से धारा 10.1 वस्तुओं

  • एक सरणी प्रकार का प्रत्यक्ष सुपरक्लास है Object

  • हर सरणी प्रकार इंटरफेस को लागू करती है Cloneableऔर java.io.Serializable

से धारा 10.7 सरणी सदस्य

एक सरणी प्रकार के सदस्य निम्नलिखित हैं:

  • सार्वजनिक अंतिम फ़ील्ड length, जिसमें सरणी के घटकों की संख्या होती है। लंबाई सकारात्मक या शून्य हो सकती है।

  • सार्वजनिक विधि clone, जो कक्षा में एक ही नाम की विधि को ओवरराइड करती है Objectऔर कोई भी जाँच अपवाद नहीं फेंकता है। cloneसरणी प्रकार की विधि का रिटर्न प्रकार T[]है T[]

  • एक बहुआयामी सरणी का एक क्लोन उथला है, जो कहना है कि यह केवल एक नया सरणी बनाता है। सबरेज़ साझा किए जाते हैं

  • सभी सदस्य वर्ग वस्तु से विरासत में मिले; विरासत में मिली वस्तु का एकमात्र तरीका इसकी क्लोन विधि है।


1

किसी भी चीज की सारणियां वस्तुएं हैं। एक जैसे तरीकों को कॉल कर सकते हैं equals, hashcodeआदि:

final int[] i = {};
i.equals(new int[] {1});  // false
i.hashcode();

एक देशी तरीके पर कॉल नहीं कर सकते।


0

कोड स्निपेट और आउटपुट के नीचे देखें।

public class Tester {
int a[];
public static void main(String[] args) {
    System.out.println(new Tester().a);// null
    System.out.println(new Tester().a[0]);// Exception in thread "main" java.lang.NullPointerException \n at mainclass.Tester.main(Tester.java:10)
}

}

स्पष्ट रूप से सरणी को वस्तु के रूप में माना जाता है।

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