জাভা এবং সি # তে কোনও পূর্ণসংখ্যা এবং পূর্ণসংখ্যার মধ্যে পার্থক্য কী?


262

আমি জোয়েল স্পোলস্কি যখন জাভা / সি # (অবজেক্ট-ওরিয়েন্টেড প্রোগ্রামিং ল্যাঙ্গুয়েজস) এর মধ্যে একটি এবং একটি মধ্যে পার্থক্য জেনে একটি বিশেষ ধরণের প্রোগ্রামার সম্পর্কে কিছু বলছিলাম তখন আমি সফটওয়্যারটিতে আরও জোয়েল পড়ছিলাম ।intInteger

তাহলে পার্থক্য টা কি?


4
সি # এর একটি পূর্ণসংখ্যার প্রকার নেই।
এহুদা গ্যাব্রিয়েল হিমাঙ্গো

উত্তর:


247

জাভাতে, 'ইন্ট' টাইপটি একটি আদিম, যেখানে 'পূর্ণসংখ্যা' টাইপটি একটি অবজেক্ট।

সি # তে, 'ইনট' টাইপটি একই রকম System.Int32এবং একটি মান ধরণের (যেমন আরও জবা 'ইনট'-এর মতো)। একটি পূর্ণসংখ্যা (অন্য কোনও মানের ধরণের মতো) বাক্সে ("মোড়ানো") কোনও বস্তুতে করা যায়।


বস্তু এবং আদিমতার মধ্যে পার্থক্য এই প্রশ্নের ক্ষেত্রের বাইরে কিছুটা হলেও সংক্ষেপে:

পলিমারফিজমের সুবিধাগুলি সরবরাহকারী অবজেক্টগুলি রেফারেন্স দ্বারা পাস করা হয় (বা আরও সঠিকভাবে রেফারেন্সগুলি মান দ্বারা প্রেরণ করা হয়), এবং গাদা থেকে বরাদ্দ করা হয় । বিপরীতে, আদিমগুলি হ'ল অপরিবর্তনীয় প্রকার যা মান দ্বারা পাস হয় এবং প্রায়শই স্ট্যাক থেকে বরাদ্দ করা হয় ।


61
বিবৃতি যে "অবজেক্টস [...] রেফারেন্স দ্বারা পাস করা হয়েছে" বিভ্রান্তিকর এবং ভুল, আইএমও। এটি বলা আরও সঠিক যে "অবজেক্টের রেফারেন্সগুলি মান দিয়ে যায়" " (এছাড়াও আদিম সর্বদা স্ট্যাক থেকে বরাদ্দ করা হয় না - একটি বস্তুর মধ্যে একটি আদিম ক্ষেত্র বিবেচনা করুন ...)
জন স্কিটি

5
কমপক্ষে সি # তে, int হল এমন একটি ভাষা কীওয়ার্ড যা ইন্টার 32 সিএলআর (আসলে সিটিএস) টাইপের সমান।
স্কট ডোরম্যান

6
দুঃখিত, ইংলিশ ভাষা "রেফারেন্স দ্বারা কিছু পাস" এবং "মান অনুসারে কোনও কিছুতে একটি রেফারেন্স পাস" সমতুল্য বিবৃতি দেয় না বা প্রোগ্রামিং ভাষার প্রসঙ্গে এইগুলির সমতুল্য অর্থ হয় না।
অ্যালান ক্রুয়েগার

8
-1। এটি জাভা কীভাবে এটি পরিচালনা করে তা সঠিকভাবে বর্ণনা করতে পারে তবে সি # এর পক্ষে এটি সম্পূর্ণ ভুল।
জোয়ি

8
কেন এই ভোট দেওয়া হয়? উত্তরটি ভুল। এটি জাভার পক্ষে একেবারেই সঠিক নয়, এমনকি সি # এর জন্যও ডান কাছাকাছি নয়। যে কেউ এই পড়েন সে এই বিষয়ে তার আগের চেয়ে কম জানবে ।
থম স্মিথ

153

ওয়েল, জাভাতে একটি ইন্ট একটি আদিম যখন একটি পূর্ণসংখ্যা একটি বস্তু। অর্থ, আপনি যদি একটি নতুন পূর্ণসংখ্যা তৈরি করেন:

Integer i = new Integer(6);

আপনি আমাকে কিছু পদ্ধতি কল করতে পারেন:

String s = i.toString();//sets s the string representation of i

যেখানে কোন ইনট সহ:

int i = 6;

আপনি এটিতে কোনও পদ্ধতি কল করতে পারবেন না, কারণ এটি কেবল আদিম। তাই:

String s = i.toString();//will not work!!!

একটি ত্রুটি উত্পাদন করতে পারে, কারণ কোন বস্তু নয়।

জাভা জাতির কয়েকটি প্রাথমিকের মধ্যে একটি (চর এবং কিছু অন্যান্য সহ)। আমি ১০০% নিশ্চিত নই, তবে আমি ভাবছি যে পূর্ণসংখ্যার অবজেক্টটির কম-বেশি কেবল একটি সম্পত্তি রয়েছে এবং সেই সম্পত্তির সাথে ইন্টারঅ্যাক্ট করার জন্য পুরো পদ্ধতি রয়েছে (উদাহরণস্বরূপ টসস্ট্রিং () পদ্ধতির মতো)। সুতরাং পূর্ণসংখ্যা হল একটি ইন্টের সাথে কাজ করার অভিনব উপায় (ঠিক সম্ভবত স্ট্রিং একটি চরকের সাথে কাজ করার অভিনব উপায়)।

আমি জানি যে জাভা সি নয়, তবে যেহেতু আমি কখনই সি তে প্রোগ্রাম করিনি এটিই আমি উত্তরটি কাছে আসতে পারলাম। আশাকরি এটা সাহায্য করবে!

পূর্ণসংখ্যার বস্তু জাভাদোক

পূর্ণসংখ্যার ওজবেক্ট বনাম পূর্ববর্তী তুলনা


সি # int- এ Int32 জন্য একটি প্রতিশব্দ হয়, দেখতে stackoverflow.com/questions/62503/c-int-or-int32-should-i-care
ripper234

আমি জাভা জানি না তবে ইন্টিজার টাইপ হয় না তবে ইন্টার 32, ইন্ট 64 হয় এবং সেগুলি স্ট্রাক্ট যা মান টাইপ। আদিম মানে সি # এর মধ্যে সিএলআর টিম দ্বারা প্রকারগুলি এফসিএল (ফ্রেমওয়ার্ক ক্লাস লাইব্রেরি) সংজ্ঞায়িত করা হয় এবং এজন্য তাদের আদিম বলা হয়। এক্ষেত্রে এমনকি ডেট আপত্তিও বলা হয় আদিম প্রকার।
তারিক

37

আমি উপরে বর্ণিত দুর্দান্ত উত্তরগুলিতে যুক্ত করব, এবং বক্সিং এবং আনবক্সিং সম্পর্কে, এবং এটি জাভাতে কীভাবে প্রযোজ্য তা সম্পর্কে আলোচনা করব (যদিও সি # তে এটি রয়েছে)। আমি কেবল জাভা পরিভাষা ব্যবহার করব কারণ এর সাথে আমি আরও বেশি ফলস

উল্লিখিত উত্তরগুলির হিসাবে, intকেবল একটি সংখ্যা ( আনবক্সড টাইপ বলা হয় ), তবে Integerএটি একটি অবজেক্ট (যার মধ্যে নম্বরটি থাকে, তাই একটি বক্সযুক্ত প্রকার)। জাভা ভাষায় বলতে গেলে, তার মানে (পৃথক্ উপর পদ্ধতি কল করতে পারবে না থেকে int), আপনি সংরক্ষণ করতে পারবেন না intবা সংগ্রহের (ইন অন্যান্য অ-বস্তুর ধরনের List, Mapইত্যাদি)। এগুলি সংরক্ষণ করার জন্য, আপনাকে প্রথমে অবশ্যই এটি সম্পর্কিত বক্সে টাইপ করতে হবে।

জাভা 5 এর পরে অটো-বক্সিং এবং অটো-আনবক্সিং নামে কিছু রয়েছে যা পর্দার আড়ালে বক্সিং / আনবক্সিংয়ের অনুমতি দেয়। তুলনা করুন এবং বিপরীতে: জাভা 5 সংস্করণ:

Deque<Integer> queue;

void add(int n) {
    queue.add(n);
}

int remove() {
    return queue.remove();
}

জাভা 1.4 বা তার আগের (কোনও জেনেরিক নেই):

Deque queue;

void add(int n) {
    queue.add(Integer.valueOf(n));
}

int remove() {
    return ((Integer) queue.remove()).intValue();
}

এটি অবশ্যই লক্ষণীয় যে জাভা 5 সংস্করণে ব্রিটিটি থাকা সত্ত্বেও, উভয় সংস্করণই অভিন্ন বাইকোড তৈরি করে। সুতরাং, যদিও স্বয়ং-বক্সিং এবং স্বত-আনবক্সিং খুব সুবিধাজনক, কারণ আপনি কম কোড লিখতে, এই অপারেশন না লোকচক্ষুর অন্তরালে ঘটে, একই রানটাইম খরচ, তাই আপনি এখনও তাদের অস্তিত্ব সম্পর্কে অবগত হতে হবে।

আশাকরি এটা সাহায্য করবে!


2
ডেকা জাভা 1.5 বা 1.4 এ নেই। এটি যোগ করা হয়েছিল 1.6।
লিও ইজেন

28

আমি কেবল এখানে পোস্ট করব যেহেতু অন্যান্য পোস্টগুলির কিছু সি # এর সাথে সামান্য ভুল।

সঠিক: এর int জন্য একটি উপনাম System.Int32
ভুল: float এটির জন্য একটি নাম নয় System.Float, তবে এটিSystem.Single

মূলত, int # সি প্রোগ্রামিং ভাষার একটি সংরক্ষিত কীওয়ার্ড এবং System.Int32মান প্রকারের জন্য একটি উপনাম ।

'' float'' এর জন্য সঠিক সিস্টেম টাইপ যেমন সিস্টেম .সিংল , তবুও ফ্লোট এবং ফ্লোট একই নয় । এর মতো কিছু প্রকার রয়েছে যার সংরক্ষিত কীওয়ার্ড রয়েছে যা টাইপের নামের সাথে সরাসরি মিলছে বলে মনে হয় না।

সি # তে '' int'' এবং '' এর মধ্যে কোনও পার্থক্য নেইSystem.Int32 '' বা অন্য জোড়া বা কীওয়ার্ড / সিস্টেমের ধরণের , এনামগুলি সংজ্ঞায়িত করার সময় ব্যতীত। এনামগুলির সাহায্যে আপনি স্টোরেজ আকারটি ব্যবহার করতে পারবেন এবং এই ক্ষেত্রে আপনি কেবল সংরক্ষিত কীওয়ার্ডটি ব্যবহার করতে পারেন, সিস্টেম রানটাইম টাইপের নামটি নয়।

ইনটির মানের চেয়েও বেশি মূল্য স্ট্যাকের মধ্যে, মেমরিতে বা সংরক্ষণযোগ্য হিপ অবজেক্ট হিসাবে প্রসঙ্গ এবং আপনি এটি কীভাবে ব্যবহার করবেন তার উপর নির্ভর করবে।

একটি পদ্ধতিতে এই ঘোষণা:

int i;

অপ্টিমাইজেশনের উপর নির্ভর করে একটি রেজিস্ট্রারে বা স্ট্যাকের উপরে বসবাস করে, iপ্রকারের একটি পরিবর্তনশীল সংজ্ঞা দেয় System.Int32। কোনও প্রকারে (স্ট্রাক্ট বা শ্রেণি) একই ঘোষণা একটি সদস্য ক্ষেত্রকে সংজ্ঞায়িত করে। একটি পদ্ধতি আর্গুমেন্ট তালিকার একই ঘোষণাটি স্থানীয় ভেরিয়েবলের মতো একই স্টোরেজ অপশন সহ একটি পরামিতি নির্ধারণ করে। (মনে রাখবেন যে এই অনুচ্ছেদটি বৈধ নয় যদি আপনি মিশ্রণে পুনরুক্তি পদ্ধতিগুলি টানতে শুরু করেন তবে এগুলি সম্পূর্ণ ভিন্ন ভিন্ন জন্তু)

একটি হিপ অবজেক্ট পেতে, আপনি বক্সিং ব্যবহার করতে পারেন:

object o = i;

iএটি স্তূপে থাকা সামগ্রীর একটি বক্সযুক্ত অনুলিপি তৈরি করবে । আইএলে আপনি সরাসরি হিপ অবজেক্টে পদ্ধতিগুলি অ্যাক্সেস করতে পারেন, তবে সি # এ আপনাকে এটি পুনরায় একটি ইনটায় ফেলে দিতে হবে যা অন্য অনুলিপি তৈরি করবে। সুতরাং, স্তূপের উপর থাকা অবজেক্টটি নতুন ইনট মানটির নতুন একটি বক্সযুক্ত অনুলিপি তৈরি না করে সি # তে সহজেই পরিবর্তন করা যাবে না। (উঘ, এই অনুচ্ছেদটি এত সহজে পড়তে পারে না))


19

জাভা 1.5 এবং অটোবক্সিং সম্পর্কিত একটি গুরুত্বপূর্ণ "quirk" রয়েছে যা পূর্ণসংখ্যার অবজেক্টগুলির সাথে তুলনা করার সময় খেলতে আসে।

জাভা সালে পূর্ণসংখ্যা মান বস্তু -128 127 থেকে অপরিবর্তনীয় হয় (যে, একটি বিশেষ পূর্ণসংখ্যা মান জন্য, 23 বলে, সব পূর্ণসংখ্যা 23 পয়েন্ট মান সঙ্গে আপনার প্রোগ্রামের মাধ্যমে instantiated বস্তু সঠিক একই বস্তুর)।

উদাহরণস্বরূপ, এটি সত্য:

Integer i1 = new Integer(127);
Integer i2 = new Integer(127);
System.out.println(i1 == i2); //  true

যদিও এটি মিথ্যা প্রত্যাবর্তন করে:

Integer i1 = new Integer(128);
Integer i2 = new Integer(128);
System.out.println(i1 == i2); //  false

== রেফারেন্সের সাথে তুলনা করে (ভেরিয়েবলগুলি একই বস্তুর দিকে নির্দেশ করে)।

আপনি কী JVM ব্যবহার করছেন তার উপর নির্ভর করে এই ফলাফলটি ভিন্ন হতে পারে বা নাও পারে। জাভা 1.5 এর স্পেসিফিকেশন অটোবক্সিংয়ের জন্য প্রয়োজন পূর্ণসংখ্যার (-128 থেকে 127) সর্বদা একই মোড়কের বস্তুতে বক্স করে।

একটি সমাধান? =) পূর্ণসংখ্যার অবজেক্টগুলির সাথে তুলনা করার সময় একজনকে সর্বদা Integer.equals () পদ্ধতি ব্যবহার করা উচিত।

System.out.println(i1.equals(i2)); //  true

এ আরো তথ্য java.net এ উদাহরণ bexhuff.com


3
নতুন অপারেটরের সাথে তৈরি বস্তুগুলি == এর সাথে তুলনা করলে সর্বদা মিথ্যা প্রত্যাবর্তন করবে। আন্দ্রিয়াস নতুন পূর্ণসংখ্যা সঙ্গে Integer.valueOf (int-) (int-) বিভ্রান্তিকর
McDowell

1
দ্রষ্টব্য: ডিফল্ট মানটি 127সংগ্রহ করা হয়েছেsun.misc.VM.getSavedProperty("java.lang.Integer.IntegerCache.high");
কেএনইউ

1
@ এবংnnil - আমি বেকার সাথে স্টেলিলেন্টে কাজ করতে ব্যবহার করি। তিনি bexhuff.com রেফারেন্সের জন্য +1 উদ্ধৃত করার জন্য একটি দুর্দান্ত উত্স!
বিসিআর


19

জাভাতে JVM এ দুটি মূল ধরণের রয়েছে । 1) আদিম প্রকার এবং 2) রেফারেন্স প্রকার। ইন্ট একটি আদিম ধরণ এবং পূর্ণসংখ্যা একটি শ্রেণির ধরণ (যা প্রকারের রেফারেন্স ধরণের)।

আদিম মানগুলি অন্যান্য আদিম মানগুলির সাথে রাষ্ট্র ভাগ করে না। একটি পরিবর্তনশীল যার প্রকারটি একটি আদিম প্রকার সবসময় সেই ধরণের একটি আদিম মান ধরে।

int aNumber = 4;
int anotherNum = aNumber;
aNumber += 6;
System.out.println(anotherNum); // Prints 4

একটি বস্তু একটি গতিশীলভাবে তৈরি শ্রেণীর উদাহরণ বা একটি অ্যারে। রেফারেন্স মান (প্রায়শই কেবল রেফারেন্স) হ'ল এই অবজেক্টের পয়েন্টার এবং একটি বিশেষ নাল রেফারেন্স, যা কোনও অবজেক্টকে বোঝায় না। একই অবজেক্টের অনেকগুলি রেফারেন্স থাকতে পারে।

Integer aNumber = Integer.valueOf(4);
Integer anotherNumber = aNumber; // anotherNumber references the 
                                 // same object as aNumber

এছাড়াও জাভাতে সমস্ত কিছু মান দ্বারা পাস হয়। অবজেক্টের সাথে যে মানটি পাস হয় তা হ'ল অবজেক্টের রেফারেন্স। সুতরাং জাভাতে int এবং পূর্ণসংখ্যার মধ্যে আরেকটি পার্থক্য হ'ল কীভাবে তারা পদ্ধতি কলগুলিতে পাস হয়। উদাহরণস্বরূপ ইন

public int add(int a, int b) {
    return a + b;
}
final int two = 2;
int sum = add(1, two);

ভেরিয়েবল দুটি আদিম পূর্ণসংখ্যা টাইপ 2 হিসাবে পাস হয় Where

public int add(Integer a, Integer b) {
    return a.intValue() + b.intValue();
}
final Integer two = Integer.valueOf(2);
int sum = add(Integer.valueOf(1), two);

ভেরিয়েবল দুটি একটি অবজেক্টের রেফারেন্স হিসাবে পাস হয় যা পূর্ণসংখ্যার মান 2 রাখে।


@ ওল্ফম্যানড্রাগন: রেফারেন্স দিয়ে পাস করা এইভাবে কাজ করবে:

public void increment(int x) {
  x = x + 1;
}
int a = 1;
increment(a);
// a is now 2

যখন বৃদ্ধি বলা হয় এটা পরিবর্তনশীল একটি রেফারেন্স (পয়েন্টার) পাসের একটি । আর বৃদ্ধি ফাংশন সরাসরি পরিবর্তনশীল পরিবর্তন একটি

এবং অবজেক্টের ধরণের জন্য এটি নিম্নলিখিত হিসাবে কাজ করবে:

public void increment(Integer x) {
  x = Integer.valueOf(x.intValue() + 1);
}
Integer a = Integer.valueOf(1);
increment(a);
// a is now 2

পার্থক্যটা কি এখন দেখছেন?


আপনার সংজ্ঞা অনুসারে, রেফারেন্স সহ কোনও পাস নেই। যে কোনও কিছু উত্তীর্ণ হবে তার অবশ্যই একটি মান (এমনকি নাল একটি মান) হওয়া উচিত, এমনকি এটি পয়েন্টারের একটি মান হলেও অন্যথায় এটি কেবল একটি খালি সেট। সিএস পদ দ্বারা, রেফারেন্স দ্বারা পাস রেফারেন্স (পয়েন্টার) এর মান পাস করছে। আমি একটু বিভ্রান্ত।
ওল্ফম্যানড্রেগন

11

C #, int-শুধু একটি হল ওরফে জন্য System.Int32, জন্য স্ট্রিং System.String, জন্য ডবলSystem.Double ইত্যাদি ...

ব্যক্তিগতভাবে আমি ইনট, স্ট্রিং, ডাবল ইত্যাদি পছন্দ করি কারণ তাদের কোনও using System;বিবৃতি প্রয়োজন হয় না :) একটি নির্বোধ কারণ, আমি জানি ...


2
এবং এটা যোগ করা, সি # 'গুলি int- এ / Int32 হয় না জাভার পূর্ণসংখ্যা হিসাবে একই।
এহুদা গ্যাব্রিয়েল হিমাঙ্গো

10

মোড়ক ক্লাস ব্যবহার করার অনেক কারণ রয়েছে:

  1. আমরা অতিরিক্ত আচরণ পাই (উদাহরণস্বরূপ আমরা পদ্ধতি ব্যবহার করতে পারি)
  2. আমরা নাল মান সংরক্ষণ করতে পারি যেখানে আদিমগুলিতে আমরা পারি না
  3. সংগ্রহগুলি আদিমগুলিকে নয় বরং বস্তুগুলি সঞ্চয় করার পক্ষে সমর্থন করে।

8

এটি ইতিমধ্যে জাভা জন্য উত্তর দেওয়া হয়েছে, এখানে সি # উত্তর:

"পূর্ণসংখ্যা" সি # তে একটি বৈধ প্রকারের নাম নয় এবং "ইনট" সিস্টেমের জন্য কেবল একটি উপনাম nt ইন্টি 32। এছাড়াও, জাভা (বা সি ++) এর বিপরীতে সি # তে কোনও বিশেষ আদিম প্রকার নেই, সি # তে টাইপের প্রতিটি উদাহরণ (অন্তর্ভুক্ত সহ) একটি বস্তু। এখানে কিছু প্রদর্শনমূলক কোড দেওয়া হয়েছে:

void DoStuff()
{
    System.Console.WriteLine( SomeMethod((int)5) );
    System.Console.WriteLine( GetTypeName<int>() );
}

string SomeMethod(object someParameter)
{
    return string.Format("Some text {0}", someParameter.ToString());
}

string GetTypeName<T>()
{
    return (typeof (T)).FullName;
}

2
পরিষ্কার হয়ে উঠতে, সি # তে, পাশাপাশি সিস্টেমের জন্যও 32Int32 কোনও বস্তু নয়। এগুলি মান ধরণের এবং বস্তুর চেয়ে সিএলআর দ্বারা অনেক আলাদাভাবে চিকিত্সা করা হয়।
পিটার মেয়ার

4
আসলে, সি # ইন 32 এ একটি অবজেক্ট। এটি system.object থেকে প্রাপ্ত একটি মূল্যবান স্ট্রাক্ট অবজেক্ট। এটি "মান" জাভাতে থাকা হিসাবে অন্যান্য মান সামগ্রীর থেকে বিশেষত আলাদাভাবে বিবেচনা করা হয় না।
ওয়েজ

8

int আদিম পরিবর্তনশীল ঘোষণার জন্য ব্যবহৃত হয়

e.g. int i=10;

পূর্ণসংখ্যা শ্রেণীর পূর্ণাঙ্গের রেফারেন্স ভেরিয়েবল তৈরি করতে ব্যবহৃত হয়

Integer a = new Integer();

8

জাভার মতো প্ল্যাটফর্মে, intগুলি আদিম থাকেInteger এমন একটি বস্তু যা একটি পূর্ণসংখ্যার ক্ষেত্র ধারণ করে। গুরুত্বপূর্ণ পার্থক্যটি হ'ল আদিমরা সর্বদা মান দ্বারা এবং সংজ্ঞা দ্বারা স্থির হয় ut

কোনও আদিম পরিবর্তনশীল জড়িত যে কোনও ক্রিয়াকলাপ সর্বদা একটি নতুন মান প্রদান করে। অন্যদিকে, অবজেক্টগুলি রেফারেন্স দিয়ে চারপাশে পাস করা হয়। যে কেউ তর্ক করতে পারে যে অবজেক্টের বিন্দু (একে একে রেফারেন্স) এছাড়াও মান দ্বারা প্রায় কাছাকাছি চলেছে, তবে বিষয়বস্তু নেই।


@ পিটার মর্টনেস, কীভাবে (ইনট্রি; ইন্টিজার এ;) প্রোগ্রামকে প্রভাবিত করে, তার অর্থ তারা কার্যকর করার সময় কীভাবে পার্থক্য রাখে।
অনুজ মাসন্দ

7

পূর্বের উত্তরে আমি আর একটি জিনিস দেখতে পাচ্ছি না: জাভাতে পূর্ণসংখ্যা, ডাবল, ফ্ল্যাট, বুলিয়ান ... এবং স্ট্রিংয়ের মতো আদিম মোড়কের ক্লাসগুলিকে অবিস্মরণীয় বলে মনে করা হয়, যাতে আপনি যখন এই ক্লাসগুলির একটি উদাহরণ পাস করেন তখন পদ্ধতিটি কোনওভাবেই আপনার ডেটা পরিবর্তন করতে পারে না, বেশিরভাগ ক্লাসের সাথে ওপোসিটিউনে, যা অভ্যন্তরীণ ডেটাগুলিকে জনসাধারণের পদ্ধতিতে পরিবর্তন করা যায়। যাতে এই ক্লাসগুলির কেবল 'গেটর' পদ্ধতি রয়েছে, কনস্ট্রাক্টর ছাড়াও 'সেটটার' নেই।

একটি জাভা প্রোগ্রামে স্ট্রিং লিটারালগুলি হিপ মেমরির পৃথক অংশে সংরক্ষণ করা হয়, কেবল উদাহরণের জন্য উদাহরণ, সেই উদাহরণগুলিকে পুনরায় ব্যবহার করে স্মৃতি সংরক্ষণ করে


7

আপনি কি এর আগে কখনও প্রোগ্রাম করেছেন (int) আপনার ভেরিয়েবলগুলির জন্য সেট করতে পারেন এমন এক আদিম ধরণের (যেমন চর, ভাসা, ...)।

তবে পূর্ণসংখ্যা হ'ল একটি মোড়কের ক্লাস যা আপনি এটি কোনও int ভেরিয়েবলের উপর কিছু ফাংশন করতে ব্যবহার করতে পারেন (উদাহরণস্বরূপ এটিকে স্ট্রিং বা উইসে বিপরীতে রূপান্তর করুন, ...), তবে নোট রাখুন যে মোড়কের ক্লাসগুলির পদ্ধতিগুলি স্থিতিশীল তাই আপনি সেগুলি ব্যবহার করতে পারেন পূর্ণাঙ্গ শ্রেণীর উদাহরণ তৈরি না করে যে কোনও সময়। একটি সংশোধন হিসাবে:

int x;
Integer y; 

x এবং y উভয় টাইপ int এর ভেরিয়েবল তবে y ইন্টিজার ক্লাস দ্বারা আবৃত থাকে এবং আপনি ব্যবহার করেন এমন অনেকগুলি পদ্ধতি রয়েছে তবে আমি আপনাকে ইন্টিজার রেপার ক্লাসের কিছু ফাংশন কল করতে হবে যা আপনি এটি সহজভাবে করতে পারেন।

Integer.toString(x);

তবে সচেতন থাকুন যে এক্স এবং y উভয়ই মূল উপাদান তবে আপনি যদি এগুলিকে আদিম ধরণের হিসাবে ব্যবহার করতে চান তবে সাধারণ ফর্মটি (এক্স সংজ্ঞায়িত করার জন্য ব্যবহৃত) ব্যবহার করুন।


7

জাভা:

int, double, long, byte, float, double, short, boolean, char- প্রিমিটিভের। ভাষা দ্বারা সমর্থিত বুনিয়াদি ডেটা ধরণের জন্য ব্যবহৃত হয়। আদিম প্রকারগুলি বস্তুক্রমক্রমের অংশ নয়, এবং তারা অবজেক্টের উত্তরাধিকার সূত্রে পায় না। এটি কোনও পদ্ধতির রেফারেন্স দিয়ে পাস করতে পারে না।

Double, Float, Long, Integer, Short, Byte, Character, এবং Booleanটাইপ Wrappers, এ প্যাকেজ হয়java.lang । সমস্ত সংখ্যার প্রকারের মোড়কগুলি এমন নির্মাতাকে সংজ্ঞায়িত করে যা কোনও নির্দিষ্ট মান থেকে কোনও অবজেক্টকে নির্মাণের অনুমতি দেয় বা সেই মানটির একটি স্ট্রিং প্রতিনিধিত্ব করে। অবজেক্টগুলি ব্যবহার করা এমনকি গণনার সবচেয়ে সহজতম ক্ষেত্রেও ওভারহেড যুক্ত করতে পারে।

জেডিকে ৫ দিয়ে শুরু করে, জাভা দুটি অত্যন্ত সহায়ক বৈশিষ্ট্য অন্তর্ভুক্ত করেছে: অটোবক্সিং এবং স্বতঃবক্সিং। অটোবক্সিং / আনবক্সিং কোডকে ব্যাপকভাবে সরল করে এবং প্রবাহিত করে যে আদিম প্রকারগুলিকে অবজেক্টগুলিতে রূপান্তর করতে হবে এবং তদ্বিপরীত।

নির্মাণকারীর উদাহরণ:

Integer(int num)
Integer(String str) throws NumberFormatException
Double(double num)
Double(String str) throws NumberFormatException

বক্সিং / আনবক্সিংয়ের উদাহরণ:

class ManualBoxing {
        public static void main(String args[]) {
        Integer objInt = new Integer(20);  // Manually box the value 20.
        int i = objInt.intValue();  // Manually unbox the value 20
        System.out.println(i + " " + iOb); // displays 20 20
    }
}

অটোবক্সিং / স্বতঃবাক্সিংয়ের উদাহরণ:

class AutoBoxing {
    public static void main(String args[]) {
        Integer objInt = 40; // autobox an int
        int i = objInt ; // auto-unbox
        System.out.println(i + " " + iOb); // displays 40 40
    }
}

পিএস হারবার্ট শিল্ডের বইটি একটি রেফারেন্স হিসাবে নেওয়া হয়েছিল।


4

কোনও int ভেরিয়েবল একটি 32 বিট স্বাক্ষরিত পূর্ণসংখ্যার মান ধারণ করে। একটি পূর্ণসংখ্যা (মূলধন I সহ) এর সাথে (শ্রেণি) টাইপ পূর্ণসংখ্যার অবজেক্টের শূন্য থাকে বা বাতিল হয়।

জাভা স্বয়ংক্রিয়ভাবে দুজনের মধ্যে কাস্ট করে; যখনই পূর্ণসংখ্যার অবজেক্টটি কোনও ইন্টি অপারেটরের আর্গুমেন্ট হিসাবে উপস্থিত হয় বা কোনও int ভেরিয়েবলের জন্য বরাদ্দ করা হয়, বা কোনও পূর্ণসংখ্যা মানটি একটি পূর্ণসংখ্যা ভেরিয়েবলের জন্য বরাদ্দ করা হয়। এই ingালাইটিকে বক্সিং / আনবক্সিং বলা হয়।

যদি একটি পূর্ণসংখ্যার পরিবর্তনশীল রেফারেন্সিং নালটি বাক্সবিন্যাস করা হয়, সুস্পষ্টভাবে বা স্পষ্টভাবে, একটি নালপয়েন্টার এক্সসেপশন নিক্ষেপ করা হয়।


4

জাভা এবং সি # তে একটি আন্তঃসংখ্যক এবং পূর্ণসংখ্যা দুটি ভিন্ন পদকে বিভিন্ন জিনিসের প্রতিনিধিত্ব করতে ব্যবহৃত হয়। এটি এমন আদিম উপাত্তগুলির মধ্যে একটি যা ভেরিয়েবলের জন্য নির্ধারিত হতে পারে যা সঠিকভাবে সঞ্চয় করতে পারে। একবারে এর ঘোষিত প্রকারের একটি মান।

উদাহরণ স্বরূপ:

int number = 7;

কোথায় intডাটাটাইপ পরিবর্তনশীল নম্বর যার মান সাত ঝুলিতে নির্ধারিত হয়। সুতরাং একটি intকেবল একটি আদিম বস্তু নয়।

যখন কোনও Integerএকটি আদিম উপাত্তের জন্য একটি মোড়কের শ্রেণি যেখানে স্থির পদ্ধতি থাকে। এটি কোনও পদ্ধতির আর্গুমেন্ট হিসাবে ব্যবহার করা যেতে পারে যার জন্য কোনও অবজেক্টের প্রয়োজন হয়, যেখানে ইন্টিগ্রিটি হিসাবে কোনও পদ্ধতির আর্গুমেন্ট হিসাবে ব্যবহার করা যেতে পারে যার জন্য একটি পূর্ণসংখ্যার মান প্রয়োজন হয়, এটি পাটিগণিতের প্রকাশের জন্য ব্যবহার করা যেতে পারে।

উদাহরণ স্বরূপ:

Integer number = new Integer(5);

4

উভয় ভাষায় (জাভা এবং সি #) int4-বাইট স্বাক্ষরিত পূর্ণসংখ্যা হয়।

জাভা থেকে ভিন্ন, সি # স্বাক্ষরযুক্ত এবং স্বাক্ষরযুক্ত উভয় পূর্ণসংখ্যার মান সরবরাহ করে। যেহেতু জাভা এবং সি # অবজেক্ট-ওরিয়েন্টেড, এই ভাষাগুলির কিছু ক্রিয়াকলাপ রান সময় দ্বারা প্রদত্ত নির্দেশাবলীতে সরাসরি ম্যাপ করে না এবং তাই কোনও ধরণের কোনও অবজেক্টের অংশ হিসাবে সংজ্ঞায়িত করা প্রয়োজন।

সি # System.Int32হ'ল রেফারেন্স টাইপের সাথে মেমরির একটি অংশ ব্যবহার করে একটি মান ধরণ যা সরবরাহ করে।

জাভা সরবরাহ করে java.lang.Integerযা একটি রেফারেন্স টাইপ অপারেটিং হয় int। পদ্ধতি Integerকরতে পারবেন সময় চালানো সরাসরি সংকলিত করতে instructions.So আমরা এটা ইন্টিজার-এর একটি দৃষ্টান্ত রূপান্তর ও পদ্ধতি (যেমন যা কিছু টাইপ দৃষ্টান্ত আশা ব্যবহার করার জন্য একটি int- এ মান বাক্স toString(), parseInt(), valueOf()ইত্যাদি)।

সি এ # পরিবর্তনশীল int- এ বোঝায় System.Int32.Any4-বাইট মান, যে System.Int32.So int- এ দৃষ্টান্ত দ্বারা কাজে ব্যবহৃত হতে পারে মেমরি একটি আদিম int- এ হিসেবে ব্যাখ্যা করা যেতে পারে উপনাম হল System.Int32.Whenব্যবহার পূর্ণসংখ্যা-সম্পর্কিত পদ্ধতি পছন্দ int.Parse(), int.ToString()ইত্যাদি পূর্ণসংখ্যা মধ্যে কম্পাইল করা হয় FCL System.Int32মত নিজ নিজ পদ্ধতি কলিং struct Int32.Parse(), Int32.ToString()


4

জাভাতে, intটাইপটি একটি আদিম উপাত্তের ধরণ, যেখানে Integerপ্রকারটি একটি বস্তু।

সি # তে, intটাইপটি কোনও ডেটা টাইপের মতো System.Int32। একটি integer(অন্য যে কোনও মানের ধরণের মত) বাক্স করা যায় ("মোড়ানো") একটি অবজেক্টে।


3

জাভা-তে একটি প্রাথমিক তথ্য টাইপ হয় যখন পূর্ণসংখ্যা হেল্পার শ্রেণি হয়, এটি একটি ডেটা টাইপকে অন্যটিতে রূপান্তর করতে ব্যবহার করা হয়।

উদাহরণ স্বরূপ:

double doubleValue = 156.5d;
Double doubleObject  = new Double(doubleValue);
Byte myByteValue = doubleObject.byteValue ();
String myStringValue = doubleObject.toString();

প্রাথমিক তথ্য প্রকারগুলি হ'ল দ্রুতগতিতে উপলব্ধ মেমরি সংরক্ষণ করে যেখানে সহায়ক সহায়ক শ্রেণি জটিল এবং হিপ মেমরিতে সঞ্চয় করে।

"ডেভিড গ্যাসনার" জাভা প্রয়োজনীয় প্রশিক্ষণ থেকে রেফারেন্স।


2

"ইনট" হ'ল আদিম ডেটা টাইপ এবং জাভাতে র্যাপার ক্লাসে "পূর্ণসংখ্যা"। "পূর্ণসংখ্যা" কোনও পদ্ধতির আর্গুমেন্ট হিসাবে ব্যবহার করা যেতে পারে যার জন্য কোনও অবজেক্ট প্রয়োজন, যেখানে "int" হিসাবে কোনও পদ্ধতির আর্গুমেন্ট হিসাবে ব্যবহার করা যেতে পারে যার জন্য একটি পূর্ণসংখ্যার মান প্রয়োজন, এটি পাটিগণিতের প্রকাশের জন্য ব্যবহার করা যেতে পারে।


1

01. পূর্ণসংখ্যা শূন্য হতে পারে। কিন্তু int নাল হতে পারে না।

Integer value1 = null; //OK

int value2 = null      //Error

02. কেবলমাত্র কোনও সংগ্রহ শ্রেণিতে র্যাপার ক্লাসের ধরণের মানগুলি পাস করতে পারে।

(মোড়ক ক্লাস - বুলিয়ান, চরিত্র, বাইট, সংক্ষিপ্ত, পূর্ণসংখ্যার, দীর্ঘ, ভাসমান, ডাবল)

List<Integer> element = new ArrayList<>();
int valueInt = 10;
Integer  valueInteger = new Integer(value);
element.add(valueInteger);

তবে সাধারণত আমরা সংগ্রহ শ্রেণিতে আদিম মানগুলি যুক্ত করি? 02 পয়েন্ট সঠিক?

List<Integer> element = new ArrayList<>();
element.add(5);

হ্যাঁ 02 সঠিক, বিকাউস autoboxing.

অটোবক্সিং হ'ল স্বয়ংক্রিয় রূপান্তর যা জাভা সংকলক আদিম ধরণের এবং তাদের সংশ্লিষ্ট র‌্যাপার শ্রেণীর মধ্যে তৈরি করে।

তারপরে 5 অটোবক্সিং দ্বারা পূর্ণসংখ্যার মান হিসাবে রূপান্তর করুন।


1

int গ্রন্থাগার ফাংশন সি # এ পূর্বনির্ধারিত তবে জাভাতে আমরা এর অবজেক্ট তৈরি করতে পারি Integer


0

(জাভা সংস্করণ) সরল কথায় ইন্ট আদিম এবং পূর্ণসংখ্যা হল ইনটারের জন্য র‍্যাপার অবজেক্ট।

একটি উদাহরণ যেখানে পূর্ণসংখ্যার বনাম ইন্টি ব্যবহার করতে হবে, আপনি যখন তুলনা করতে চান এবং ইন্ট ভেরিয়েবল আবার নাল এটি ত্রুটি নিক্ষেপ করবে।

int a;
//assuming a value you are getting from data base which is null
if(a ==null) // this is wrong - cannot compare primitive to null
{
do something...}

Instead you will use,
Integer a;
//assuming a value you are getting from data base which is null
if(a ==null) // this is correct/legal
{ do something...}

0

জাভাতে আমার জ্ঞান অনুসারে যদি আপনি তখন শিখেন, আপনি যখন int লিখবেন; তারপরে জাভা জেনেরিক এ কোডটি সংকলন করবে Integer a = new Integer()। সুতরাং, জেনেরিক অনুযায়ী Integerব্যবহার করা হয় না তবে intব্যবহৃত হয়। সুতরাং সেখানে এত পার্থক্য আছে।


এই প্রশ্নের আরও 18 টি উত্তর রয়েছে। আপনার কি এমন কিছু যুক্ত হয় যা অন্যরা মিস করেছে? এটি যে ব্যাকরণগত নয় এটি দিয়ে শুরু করে না।
তেপীম্ম

0

int একটি আদিম ডেটা টাইপ। পূর্ণসংখ্যা একটি মোড়কের ক্লাস। এটি অবজেক্ট হিসাবে ইনট ডেটা সংরক্ষণ করতে পারে।


0

ইন্ট হ'ল একটি আদিম ডেটাটাইপ, যেখানে পূর্ণসংখ্যা একটি বস্তু। পূর্ণসংখ্যার সাহায্যে একটি অবজেক্ট তৈরি করা আপনাকে পূর্ণসংখ্যার শ্রেণিতে উপলব্ধ সমস্ত পদ্ধতিতে অ্যাক্সেস দেয়। তবে, আপনি যদি ইন্টির সাহায্যে কোনও আদিম ডেটা টাইপ তৈরি করেন, আপনি সেই ইনবিল্ড পদ্ধতিগুলি ব্যবহার করতে পারবেন না এবং এগুলি আপনাকে নিজের দ্বারা সংজ্ঞায়িত করতে হবে। তবে, আপনি যদি অন্য কোনও পদ্ধতি না চান এবং প্রোগ্রামটিকে আরও মেমরিকে দক্ষ করে তুলতে চান তবে আপনি আদিম ডাটাটাইপ সহ যেতে পারেন কারণ কোনও বস্তু তৈরি করা স্মৃতির খরচ বাড়িয়ে তুলবে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.