दिलचस्प पोस्ट
PHP सत्र अपहरण मैं अपने डिब्बे के निचले हिस्से में एक डिवा फ्लोट कैसे प्राप्त करूं? सप्ताह, महीनों, तिमाहियों और वर्षों के संदर्भ में तिथियों के बीच का अंतर प्राप्त करें सबसे कुशल टी-एसक्यूएल का रास्ता एक निश्चित लंबाई के लिए बाईं तरफ एक varchar पैड? पायथन: समूह का उपयोग करके समूह में सबसे अधिक मूल्य वाली पंक्ति प्राप्त करना कस्टम फेसबुक लॉगिन बटन – एंड्रॉइड Android से जावास्क्रिप्ट को कैसे कॉल करें? एंड्रॉइड मार्केट से ऐप इंस्टॉल करने के बाद रेफरर प्राप्त करें पायथन Urllib2 SSL त्रुटि \ == / 2 या dif / 2 का उपयोग करना नए-शैली वाले कक्षाओं में विधि संकल्प आदेश (एमआरओ)? सी # में वर्ण को दोहराने का सबसे अच्छा तरीका ओ एक छवि प्रदर्शित Const और const अस्थिर के बीच का अंतर गतिशील रूप से बूटस्ट्रैप के 'पॉपओवर' कंटेनर को एक क्लास जोड़ें

क्या सरणी पर क्लोन () को कॉल करना भी इसकी सामग्री क्लोन करता है?

अगर मैं clone() पद्धति को ऑब्जेक्ट्स टाइप ए के ऑब्जेक्ट में लाता हूं, तो उसके तत्व कैसे क्लोन होंगे? क्या प्रति एक ही वस्तुओं को संदर्भित किया जा सकता है? या इसे कॉल करेंगे (element of type A).clone() उनमें से प्रत्येक के लिए?

वेब के समाधान से एकत्रित समाधान "क्या सरणी पर क्लोन () को कॉल करना भी इसकी सामग्री क्लोन करता है?"

clone() एक उथले प्रतिलिपि बनाता है इसका अर्थ है कि तत्वों को क्लोन नहीं किया जाएगा। (यदि वे Cloneable करने Cloneable नहीं हैं तो क्या होगा?)

आप clone() बजाय एरेज़ की प्रतिलिपि बनाने के लिए Arrays.copyOf(..) का उपयोग करना चाहते हैं (हालांकि क्लोनिंग एरे के लिए ठीक है, कुछ और के विपरीत)

यदि आप गहरे क्लोनिंग चाहते हैं, तो इस उत्तर की जांच करें


clone() का उथलापन स्पष्ट करने के लिए एक छोटा उदाहरण है, भले ही तत्व clone() करने Cloneable :

 ArrayList[] array = new ArrayList[] {new ArrayList(), new ArrayList()}; ArrayList[] clone = array.clone(); for (int i = 0; i < clone.length; i ++) { System.out.println(System.identityHashCode(array[i])); System.out.println(System.identityHashCode(clone[i])); System.out.println(System.identityHashCode(array[i].clone())); System.out.println("-----"); } 

प्रिंटों:

 4384790 4384790 9634993 ----- 1641745 1641745 11077203 ----- 

अगर मैं क्लोन () पद्धति को ऑब्जेक्ट्स टाइप ए के ऑब्जेक्ट में लाता हूं, तो उसके तत्व कैसे क्लोन होंगे?

सरणी के तत्वों को क्लोन नहीं किया जाएगा।

क्या प्रति एक ही वस्तुओं को संदर्भित किया जा सकता है?

हाँ।

या इसे कॉल करेंगे (प्रकार A का तत्व) .clone () उनमें से प्रत्येक के लिए?

नहीं, यह तत्वों में से किसी पर clone() कॉल नहीं करेगा

प्राइमटाइव की 1D सरणी उन तत्वों को प्रतिलिपि बनाता है, जब इसे क्लोन किया जाता है। यह हमें 2 डी सरणी (सरणी के सरणी) को क्लोन करने का प्रयास करता है।

याद रखें कि 2 डी सरणी क्लोन clone() उथले प्रतिलिपि कार्यान्वयन के कारण काम नहीं करता है।

 public static void main(String[] args) { int row1[] = {0,1,2,3}; int row2[] = row1.clone(); row2[0] = 10; System.out.println(row1[0] == row2[0]); // prints false int table1[][]={{0,1,2,3},{11,12,13,14}}; int table2[][] = table1.clone(); table2[0][0] = 100; System.out.println(table1[0][0] == table2[0][0]); //prints true } 

क्लोन सरणी के एक उथले प्रतिलिपि है

यह परीक्षण कोड प्रिंट करता है:

 [1, 2] / [1, 2]
 [100, 200] / [100, 2]

क्योंकि MutableInteger दोनों arrays में objects[0] और objects[0] रूप में साझा किया जाता है, लेकिन आप objects[1] से स्वतंत्र रूप से संदर्भ objects[1] बदल सकते हैं objects2[1]

 import java.util.Arrays; public class CloneTest { static class MutableInteger { int value; MutableInteger(int value) { this.value = value; } @Override public String toString() { return Integer.toString(value); } } public static void main(String[] args) { MutableInteger[] objects = new MutableInteger[] { new MutableInteger(1), new MutableInteger(2) }; MutableInteger[] objects2 = objects.clone(); System.out.println(Arrays.toString(objects) + " / " + Arrays.toString(objects2)); objects[0].value = 100; objects[1] = new MutableInteger(200); System.out.println(Arrays.toString(objects) + " / " + Arrays.toString(objects2)); } }