দীর্ঘ বনাম পূর্ণসংখ্যা, দীর্ঘ বনাম ইন্টি, কখন ব্যবহার করবেন?


135

মাঝে মাঝে আমি এপিআই এর ব্যবহার দেখতে longবা Longবা intবা Integer, এবং আমি পারবো না চিত্রে কিভাবে সিদ্ধান্ত যে জন্য তৈরি করা হয়?

আমি কখন নির্বাচন করব?

উত্তর:


191

Longএর Objectরূপ long, এবং Integerএর অবজেক্ট ফর্ম int

longব্যবহার 64 বিটintব্যবহারসমূহ 32 বিট, এবং তাই শুধুমাত্র সংখ্যা ± 2 বিলিয়ন পর্যন্ত ধরে রাখতে পারেন (-2 31 +2 থেকে 31 -1)।

আপনি ব্যবহার করা উচিত longএবং intছাড়া তুমি কোথা থেকে উত্তরাধিকারসূত্রে পদ্ধতি ব্যবহার করতে হবে Object, যেমন hashcodeJava.util.collectionsপদ্ধতিগুলি সাধারণত বক্সযুক্ত ( Object-মোড়ানো) সংস্করণগুলি ব্যবহার করে , কারণ এগুলির জন্য যে কোনও একটির জন্য কাজ করা প্রয়োজন Object, এবং একটি আদিম ধরণের, যেমন intবা long, এটি কোনও নয় Object

আরেকটি পার্থক্য হল longএবং intহয় পাস-বাই-মান , যেহেতু Longএবং Integerহয় পাস-বাই-রেফারেন্স মান , সমস্ত অ-আদিম জাভা ধরনের মত। সুতরাং যদি কোনওটিকে সংশোধন করা সম্ভব হয় Longবা Integer(এটি না হয় তবে তারা জেএনআই কোড ব্যবহার না করেই পরিবর্তনযোগ্য), অন্যটির অপরটির ব্যবহারের আরও একটি কারণ থাকতে পারে।

একটি চূড়ান্ত পার্থক্য একটি Longবা Integerহতে পারে null


5
@ বোরিলিড, এটি খুব ভুল, জাভা সর্বদা মান দ্বারা পাস হয়, জাভাতে রেফারেন্স বাই পাসের মতো কিছুই নেই।
দিয়েগো রামোস

9
আহ হাহ? ঠিক আছে, আসুন এই ধারণাটি অন্বেষণ করুন যে জাভা কখনই কোনও রেফারেন্স দেয় না। যদি আমি কোনও ক্রিয়াকলাপটিকে এন্টি [2] দিয়ে বলি এবং তারপরে ফাংশনের অভ্যন্তরে আমি সেই অ্যারের প্রথম উপাদানটিতে থাকা মানটি পরিবর্তন করি তবে ফাংশনের কলার সেই পরিবর্তনটি দেখতে পাবে? হ্যাঁ? ওয়েল এটি কারণ কারণ ফাংশনটি যা পাস করা হয়েছিল তা অ্যারের মানগুলি ছিল না, বরং সেই মানগুলির একটি রেফারেন্স ছিল। "মান দ্বারা পাস" এর অর্থ হ'ল প্রকৃত ডেটা নিজেরাই বিনা নির্দেশে চারপাশে অনুলিপি করা হচ্ছে। যাঁরা আপনাকে শিখিয়েছিলেন যে জাভা হ'ল পাস-বাই-ভ্যালু সেগুলি আপনি অস্বীকার করেছিলেন।
বিরপেড

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

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

2
পুনঃটুইট করেছেন জাভা সবসময় মান পাস, কারণ মান যখন অ আদিম একটি মেমরি রেফারেন্স স্ট্যাটিক সোয়াপিং না জাভা কাজ, আরো বিস্তারিত জানার জন্য এখানে আছে বিভ্রান্তি সৃষ্টি হয়: journaldev.com/3884/...
Panthro

28

আদিম ধরণের সাথে আপনি না করতে পারেন এমন কয়েকটি জিনিস রয়েছে:

  • একটি nullমান আছে
  • তাদের উপর সিঙ্ক্রোনাইজ করুন
  • জেনেরিক ক্লাসের জন্য টাইপ প্যারামিটার হিসাবে তাদের ব্যবহার করুন এবং এর সাথে সম্পর্কিত:
  • তাদের একটি API যা সাথে কাজ করে পাস Objectগুলি

আপনার যদি কারওর প্রয়োজন না হয় তবে আপনার আদিম ধরণের পছন্দ করা উচিত, কারণ তাদের স্মৃতিশক্তি কম থাকে।


24
  • ডিফল্টরূপে একটি ব্যবহার করুন int, যখন সংখ্যা রাখবেন।
  • এর ব্যাপ্তি intযদি খুব কম হয় তবে a ব্যবহার করুনlong
  • এর পরিসীমা longখুব কম হলে ব্যবহার করুনBigInteger
  • আপনার যদি নিজের নম্বরগুলি অবজেক্ট হিসাবে পরিচালনা করতে হয় (উদাহরণস্বরূপ এগুলিতে একটি রাখার সময় Collection, হ্যান্ডলিং null, ...) ব্যবহার করুন Integer/ Longপরিবর্তে

13

আন intএকটি 32-বিট পূর্ণসংখ্যা; একটি longএকটি 64-বিট পূর্ণসংখ্যা। কোনটি ব্যবহার করবেন তা নির্ভর করে আপনি কত বড় সংখ্যাটি নিয়ে কাজ করতে পারবেন তার উপর।

intএবং longআদিম ধরণের, যখন Integerএবং Longঅবজেক্টগুলি। আদিম ধরণেরগুলি আরও দক্ষ, তবে কখনও কখনও আপনাকে অবজেক্টগুলি ব্যবহার করতে হবে; উদাহরণস্বরূপ, জাভার সংগ্রহ শ্রেণীর শুধুমাত্র বস্তুর সঙ্গে কাজ করতে পারেন, তাই যদি আপনি পূর্ণসংখ্যার একটি তালিকা প্রয়োজন আপনি এটি একটি করতে হবে List<Integer>, উদাহরণস্বরূপ (আপনি ব্যবহার করতে পারবেন না intএকটি Listসরাসরি)।


6

পূর্ণসংখ্যা একটি স্বাক্ষরিত 32 বিট পূর্ণসংখ্যার প্রকার

  • হিসাবে চিহ্নিত Int
  • আকার = 32 bits (4byte)
  • পরিসরের পূর্ণসংখ্যা ধরে রাখতে পারে -2,147,483,648 to 2,147,483,647
  • ডিফল্ট মান 0


লং একটি স্বাক্ষরিত 64 বিট পূর্ণসংখ্যার প্রকার

  • হিসাবে চিহ্নিত Long
  • আকার = 64 bits (8byte)
  • পরিসরের পূর্ণসংখ্যা ধরে রাখতে পারে -9,223,372,036,854,775,808 to 9,223,372,036,854,775,807
  • ডিফল্ট মান 0L


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

একে অপরকে বেছে নেওয়ার একটি উদাহরণ ইউটিউবের ক্ষেত্রে case তারা প্রথমত ভিডিও ভিউ কাউন্টারটিকে এমন হিসাবে সংজ্ঞায়িত করে intযা উপচে পড়েছিল যখন একটি জনপ্রিয় ভিডিওতে প্রাপ্ত প্রাপ্তির বেশি 2,147,483,647 টি দেখা। যেহেতু একটি Intকাউন্টার তার ব্যাপ্তির চেয়ে বেশি কোনও মান সঞ্চয় করতে পারে না, ইউটিউব কাউন্টারটিকে একটি 64 বিট ভেরিয়েবলে পরিবর্তন করেছে এবং এখন 9,223,372,036,854,775,807 টি পর্যন্ত গণনা করতে পারে। আপনার ডেটা বুঝুন এবং type৪ বিট ভেরিয়েবলের মতো টাইপ চয়ন করুন যা 32 বিটের ভেরিয়েবলের চেয়ে দ্বিগুণ স্মৃতি গ্রহণ করবে।


1

যখন এটি উপস্থাপনের জন্য 32 বিট অতিক্রম করতে পারে এমন একটি দীর্ঘ সংখ্যা ব্যবহার করার কথা আসে, আপনি যাতে দীর্ঘ সময় ব্যবহার করতে পারেন তা নিশ্চিত করার জন্য আপনি ব্যবহার করতে পারেন strange

জাভা 5 থেকে আপনি ইন-বক্সিং এবং আউট-বক্সিং বৈশিষ্ট্যগুলি ইনট এবং ইন্টিজারের ব্যবহার সম্পূর্ণরূপে তৈরি করতে ব্যবহার করতে পারেন। এর অর্থ হ'ল আপনি এটি করতে পারেন:

int myInt = new Integer(11);
Integer myInt2 = myInt;

ইন ও আউট বক্সিং (জন্য একই করে আপনাকে কোনো অতিরিক্ত রূপান্তর ছাড়া int এবং পূর্ণসংখ্যা মধ্যে স্যুইচ করার অনুমতি দেয় Long, Double, Shortখুব)

আপনি intসব সময় ব্যবহার করতে পারেন তবে Integerকয়েকটি সহায়ক পদ্ধতি রয়েছে যা আপনাকে পূর্ণসংখ্যার (যেমন Integer.parseInt(String)) দিয়ে কিছু জটিল ক্রিয়াকলাপ করতে সহায়তা করতে পারে


0

ক) বস্তু ক্লাস "লং" বনাম আদিম প্রকার "দীর্ঘ"। (অন্তত জাভাতে)

খ) আদিম ধরণের বিভিন্ন (এমনকি অস্পষ্ট) মেমরির আকার রয়েছে:

জাভা - সব পরিষ্কার: https://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html

  • বাইট, চর .. 1 বি .. 8 বি
  • শর্ট ইনট .. 2 বি .. 16 বি
  • int .. .. .. .. 4B .. 32 খ
  • দীর্ঘ অন্তঃ .. 8 বি .. 64 বি

সি .. জগাখিচুড়ি: https://en.wikedia.org/wiki/C_data_tyype

  • সংক্ষিপ্ত .. .. 16 বি
  • অন্ত .. .. .. 16 বি ... ডব্লিউটিএফ?!?!
  • দীর্ঘ .. .. 32 বি
  • লম্বা লম্বা .. 64 বি .. জগাখিচুড়ি! : - /

এটি প্রশ্নের উত্তর দেয় না, যা দীর্ঘ এবং দীর্ঘ ইত্যাদির মধ্যে পার্থক্য সম্পর্কে
গ্রীনআসজেড

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

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