1. குறிப்பு மாறிகள்

ஜாவா மொழியில், இரண்டு வகையான மாறிகள் உள்ளன: பழமையான மாறிகள் மற்றும் மற்ற அனைத்தும். அது நடக்கும், நாம் இப்போது "மற்ற அனைத்தையும்" பற்றி பேச போகிறோம்.

உண்மையில், பழமையான மாறிகள் மற்றும் குறிப்பு மாறிகள் உள்ளன என்று சொல்வது மிகவும் சரியாக இருக்கும் . இந்த குறிப்பு மாறிகள் என்ன?

பழமையான வகைகளைப் போலன்றி, அதன் மாறிகள் மதிப்புகளை நேரடியாகச் சேமிக்கின்றன, குறிப்பு மாறிகள் பொருள்களுக்கான குறிப்புகளைச் சேமிக்கின்றன. அதாவது, நினைவகத்தில் எங்காவது ஒரு பொருள் உள்ளது, மேலும் குறிப்பு மாறி இந்த பொருளின் முகவரியை நினைவகத்தில் சேமிக்கிறது (பொருளுக்கான குறிப்பு).

பழமையான வகைகள் மட்டுமே மதிப்புகளை நேரடியாக மாறிகளுக்குள் சேமிக்கின்றன. மற்ற அனைத்து வகைகளும் ஒரு பொருள் குறிப்பை மட்டுமே சேமிக்கின்றன . மூலம், நீங்கள் ஏற்கனவே இரண்டு வகையான மாறிகளை சந்தித்திருக்கிறீர்கள் - Stringமாறிகள் மற்றும் வரிசை மாறிகள்.

ஒரு வரிசை மற்றும் சரம் இரண்டும் நினைவகத்தில் எங்காவது சேமிக்கப்பட்ட பொருள்கள். Stringமாறிகள் மற்றும் வரிசை மாறிகள் பொருள்களுக்கான குறிப்புகளை மட்டுமே சேமிக்கின்றன.

ஜாவாவில் குறிப்பு மாறிகள்

int a, int b and double dபழமையான மாறிகள் அவற்றின் மதிப்புகளை தங்களுக்குள் சேமிக்கின்றன.

ஒரு மாறி என்பது ஒரு குறிப்பு மற்றும் நினைவகத்தில் String strஒரு பொருளின் முகவரியை (குறிப்பு) சேமிக்கிறது .String

ஒரு பழமையான வகையின் மாறிக்கு ஒரு பழமையான மதிப்பை ஒதுக்கும்போது, ​​அதன் மதிப்பு நகலெடுக்கப்படுகிறது (நகல்). ஒரு குறிப்பு மாறியை ஒதுக்கும்போது, ​​பொருளின் முகவரி மட்டுமே நகலெடுக்கப்படும் - பொருளே நகலெடுக்கப்படவில்லை .


2. குறிப்புகள் எதைப் பற்றியது?

குறிப்பு மாறிகள் மற்றும் பழமையான மாறிகள் இடையே உள்ள அடிப்படை வேறுபாடு என்ன?

ஒரு பழமையான மாறி ஒரு பெட்டி போன்றது: நீங்கள் அதில் சில மதிப்பை சேமிக்கலாம். குறிப்பு மாறி என்பது தொலைபேசி எண்ணைக் கொண்ட காகிதத் துண்டு போன்றது.

ஒரு கார் vs காரின் சாவி

உங்கள் நண்பரின் பிறந்தநாளுக்கு ஒரு கார் கொடுக்க நீங்கள் முடிவு செய்கிறீர்கள் என்று கற்பனை செய்து பாருங்கள். நீங்கள் அதை ஒரு பெட்டியில் போர்த்தி அதை உங்களுடன் எடுத்துச் செல்ல மாட்டீர்கள்: கார் அதற்கு மிகவும் பெரியது.

கார் சாவிகளை மட்டும் வைத்திருக்கும் அளவுக்கு பெரிய பெட்டியில் வைப்பது மிகவும் வசதியானது. பெட்டியிலிருந்து சாவியைப் பெறும்போது உங்கள் நண்பர் எல்லாவற்றையும் புரிந்துகொள்வார். நீங்கள் சாவியை ஒப்படைக்கும்போது முழு காரையும் உங்களுடன் எடுத்துச் செல்ல வேண்டிய அவசியமில்லை.

ஒரு நபர் மற்றும் அவரது தொலைபேசி எண்

அல்லது இங்கே மற்றொரு ஒப்பீடு: ஒரு நபர் மற்றும் அவரது தொலைபேசி எண். தொலைபேசி எண் என்பது நபர் அல்ல, ஆனால் ஒரு தொலைபேசி எண்ணைப் பயன்படுத்தி அவளை அழைக்கலாம், அவளிடம் சில தகவல்களைக் கேட்கலாம் அல்லது வழிமுறைகளை வழங்கலாம்.

இதேபோல், ஒரு பொருளுடன் தொடர்பு கொள்ள ஒரு குறிப்பு பயன்படுத்தப்படுகிறது. அனைத்து பொருட்களும் குறிப்புகளைப் பயன்படுத்தி ஒன்றோடொன்று தொடர்பு கொள்கின்றன. "ஆள்களை பரிமாறிக்கொள்வதற்கு" பதிலாக, நாங்கள் தொலைபேசி எண்களை பரிமாறிக் கொள்கிறோம்.

ஒரு பழமையான மாறிக்கு மதிப்பை ஒதுக்கும்போது, ​​அதன் மதிப்பு நகலெடுக்கப்படுகிறது (நகல்). ஒரு குறிப்பு மாறிக்கு மதிப்பை ஒதுக்கும்போது, ​​பொருளின் முகவரி (தொலைபேசி எண்) மட்டுமே நகலெடுக்கப்படும் - பொருள் நகலெடுக்கப்படவில்லை.

ஒரு குறிப்பு மேலும் ஒரு நன்மையை வழங்குகிறது: நீங்கள் ஒரு பொருளின் குறிப்பை சில முறைகளுக்கு அனுப்பலாம், மேலும் அந்த முறையைப் பயன்படுத்தி, அதன் முறைகளை அழைப்பதன் மூலமும், பொருளின் உள்ளே உள்ள தரவை அணுகுவதன் மூலமும் அந்த முறை பொருளை மாற்ற (மாற்ற) முடியும்.


3. குறிப்புகளை ஒதுக்குதல்

குறிப்பு மாறிகளை ஒதுக்கும்போது, ​​நினைவகத்தில் உள்ள பொருளின் முகவரி மட்டுமே ஒதுக்கப்படும். பொருள்கள் தோன்றுவதும் மறைவதும் இல்லை.

இந்த அணுகுமுறை அதிக அளவு நினைவகத்தை நகலெடுப்பதைத் தவிர்க்கிறது. நீங்கள் ஒரு முறைக்கு மிகப் பெரிய பொருளை அனுப்ப வேண்டும் என்றால், நாங்கள் பொருள் குறிப்பை அனுப்புகிறோம், அவ்வளவுதான். குறிப்பு மிகவும் குறைவான இடத்தை எடுக்கும்.

குறிப்புகளை ஒதுக்குதல்

அனைத்து குறிப்பு மாறிகளின் அளவும் (அவற்றின் வகையைப் பொருட்படுத்தாமல்) ஒரே மாதிரியாக இருக்கும் - 4 பைட்டுகள் (ஒரு முழு எண்ணாக). ஆனாலும்! உங்கள் பயன்பாடு 64-பிட் ஜாவா கணினியில் இயங்கினால், எல்லா குறிப்புகளும் 8 பைட்டுகள் (64 பிட்கள்) அளவில் இருக்கும்.

மேலும் என்னவென்றால், குறிப்புகளை ஒருவருக்கொருவர் மட்டுமே ஒதுக்க முடியும். நீங்கள் குறிப்புகளை மாற்றவோ அல்லது குறிப்பு மாறிகளுக்கு தன்னிச்சையான மதிப்புகளை ஒதுக்கவோ முடியாது:

குறியீடு விளக்கம்
String hello = "Hello";
String s = hello;
இது அனுமதிக்கப்படுகிறது
String hello = "Hello";
hello++;
ஆனால் இதற்கு அனுமதி இல்லை
String hello = 0x1234;
மேலும் இதற்கு அனுமதி இல்லை

4. ஒரு nullகுறிப்பு

குறிப்பு மாறிக்கு இதுவரை எதுவும் ஒதுக்கப்படவில்லை என்றால், அது எதைச் சேமிக்கும்?

இது ஒரு பூஜ்ய குறிப்பை சேமிக்கிறது . nullஒரு சிறப்பு ஜாவா முக்கிய வார்த்தை என்பது குறிப்பு இல்லாதது (வெற்று குறிப்பு). எந்த குறிப்பு மாறிக்கும் மதிப்பை nullஒதுக்கலாம்.

அனைத்து குறிப்பு மாறிகளும் nullசில வகையான குறிப்புகளை ஒதுக்கியிருந்தால் தவிர.

எடுத்துக்காட்டுகள்:

குறியீடு விளக்கம்
class Person
{
   public static String name;
   public static int age;
}


மாறிக்கு String nameஇயல்புநிலை மதிப்பு உள்ளது: null.
மாறிக்கு int ageஇயல்புநிலை மதிப்பு உள்ளது: 0.

மதிப்பு ஒதுக்கப்படாத உள்ளூர் மாறிகள் பழமையான மற்றும் குறிப்பு வகைகளுக்கு துவக்கப்படாததாகக் கருதப்படுகின்றன.

ஒரு மாறி சில பொருளின் குறிப்பைச் சேமித்து, நீங்கள் மாறியின் மதிப்பை அழிக்க விரும்பினால், அதற்கு பூஜ்ய குறிப்பை ஒதுக்கவும்.

குறியீடு விளக்கம்
String s = null;
s = "Hello";
s = null;
sகடைகள் null. ஒரு சரம் பொருள் கடைகளில்
sஒரு குறிப்பை சேமிக்கிறது .
snull

5. முறைகளுக்கான குறிப்புகளை அனுப்புதல்

ஒரு முறையில் குறிப்பு வகைகளான அளவுருக்கள் இருந்தால் , குறிப்பு அல்லாத மாறிகளுடன் பணிபுரியும் போது அதே வழியில் மதிப்புகள் முறைக்கு அனுப்பப்படும். அளவுரு மற்ற மாறியின் மதிப்பை ஒதுக்குகிறது.

உதாரணமாக:

குறியீடு விளக்கம்
class Solution
{
   public static void fill(String[] array, String value)
   {
      for (int i = 0; i < array.length; i++)
        array[i] = value;
   }

   public static void main(String[] args)
   {
     String[] data = new String[10];
     fill(data, "Hello");
   }
}


fillஅனுப்பப்பட்ட வரிசையை ( array) அனுப்பிய மதிப்புடன் ( ) நிரப்புகிறது value.

fillமுறை அழைக்கப்படும் போது , array​​அளவுரு வரிசைக்கு ஒரு குறிப்பு ஒதுக்கப்படும் data. மாறிக்கு valueசரம் பொருளுக்கு ("ஹலோ") குறிப்பு ஒதுக்கப்பட்டுள்ளது.

இந்த முறையை அழைப்பதற்கு முன் நினைவகம் எப்படி இருக்கும் fill:

முறைகளுக்கான குறிப்புகளை அனுப்புதல்

இந்த முறை இயங்கும் போது நினைவகம் எப்படி இருக்கும் fill :

முறைகளுக்கான குறிப்புகளை அனுப்புதல் 2

மற்றும் மாறிகள் நினைவகத்தில் dataஉள்ள arrayஅதே கொள்கலனை (குறிப்புகளை சேமிக்க) குறிக்கிறது.

மாறி valueசரம் பொருள் ( "Hello") ஒரு குறிப்பை சேமிக்கிறது.

வரிசையின் செல்கள் பொருளின் குறிப்புகளை மட்டும் சேமிக்கும் "Hello".

உண்மையில், எந்த பொருட்களும் நகலெடுக்கப்படவில்லை - குறிப்புகள் மட்டுமே நகலெடுக்கப்படுகின்றன.



6. C/C ++ மொழியுடன் ஒப்பீடு

நேர்காணல்களில், சில நேரங்களில் ஜாவா புரோகிராமர்களிடம் ஜாவாவில் உள்ள முறைகளுக்கு தரவு எவ்வாறு அனுப்பப்படுகிறது? சில சமயங்களில் தரவு குறிப்பு மூலம் அனுப்பப்படுகிறதா அல்லது மதிப்பின் மூலம் அனுப்பப்படுகிறதா என்பது கேள்வி.

இந்தக் கேள்வி C++ இலிருந்து வந்தது, ஆனால் ஜாவாவில் இது மிகவும் அர்த்தமுள்ளதாக இல்லை . ஜாவாவில், அளவுருக்கள் எப்போதும் வாதங்களின் மதிப்புகளை ஒதுக்குகின்றன. எனவே சரியான பதில் " மதிப்பால் " இருக்கும் .

ஆனால் உங்கள் நிலைப்பாட்டை விளக்கத் தயாராக இருங்கள் , ஏனெனில் நீங்கள் மறுமொழியை உடனடியாகக் கேட்கலாம்: "பழமையான வகைகள் மதிப்பால் அனுப்பப்படுகின்றன, மற்றும் குறிப்பு வகைகள் குறிப்பு மூலம் அனுப்பப்படுகின்றன."

இந்த சிக்கலின் தோற்றம் பல ஜாவா புரோகிராமர்கள் கடந்த காலத்தில் C++ புரோகிராமர்களாக இருந்ததன் காரணமாகும். அந்த நிரலாக்க மொழியில், முறைகளுக்கு அளவுருக்கள் எவ்வாறு அனுப்பப்படுகின்றன என்ற கேள்வி மிகவும் முக்கியமானது.

ஜாவாவில், எல்லாமே தெளிவற்றவை: பழமையான வகைகள் மதிப்புகளை சேமிக்கின்றன மற்றும் குறிப்பு வகைகளும் ஒரு மதிப்பை சேமிக்கின்றன - ஒரு குறிப்பு. ஒரு மாறி மதிப்பாகக் கருதப்படுகிறதா என்பது ஒரு கேள்வி .

C++ இல், ஒரு மாறியானது ஒரு பொருள் மற்றும் பொருளின் குறிப்பைச் சேமிக்க முடியும். பழமையான வகைகளிலும் இதுவே உண்மையாக இருந்தது: ஒரு பழமையான மாறி ஒரு மதிப்பை சேமிக்கலாம் அல்லது மாறியை ஒரு குறிப்பாக அறிவிக்கலாம் int. எனவே, குழப்பத்தைத் தவிர்க்க, C++ புரோகிராமர்கள் எப்போதும் பொருளை ஒரு குறிப்பு என்றும் , பொருளையே - ஒரு மதிப்பு என்றும் குறிப்பிடுகின்றனர் .

C++ இல், ஒரு மாறியில் ஒரு பொருளைக் கொண்டிருக்கும் சூழ்நிலையை நீங்கள் எளிதாகக் கொண்டிருக்கலாம், ஆனால் மற்றொன்று அந்த பொருளின் குறிப்பைக் கொண்டிருக்கும். அதன்படி, ஒரு மாறி என்ன சேமிக்கிறது என்ற கேள்வி - பொருளே அல்லது அதைக் குறிப்பிடுவது - மிகவும் முக்கியமானது. ஒரு பொருள் ஒரு முறைக்கு அனுப்பப்பட்டால், அது நகலெடுக்கப்பட்டது (மதிப்பினால் அனுப்பப்பட்டால்), மற்றும் நகலெடுக்கப்படவில்லை (குறிப்பு மூலம் அனுப்பப்பட்டால்).

ஜாவாவில், இந்த இரட்டைத்தன்மை இல்லை, எனவே சரியான பதில்: வாதங்கள் மதிப்பு மூலம் ஜாவா முறைகளுக்கு அனுப்பப்படுகின்றன . குறிப்பு மாறிகளைப் பற்றி நாம் பேசும்போது, ​​​​இந்த மதிப்பு ஒரு குறிப்பு.