সংক্ষিপ্ত মান জাভা নির্ধারণ


114

আমি J2ME এ একটি ছোট কোড লিখছি। আমি একটি পদ্ধতি সঙ্গে ক্লাস আছে setTableId(Short tableId)। এখন যখন আমি setTableId(100)এটি লেখার চেষ্টা করি তখন সংকলন সময় ত্রুটি দেয়। অন্য সংক্ষিপ্ত পরিবর্তনশীল ঘোষণা না করে আমি কীভাবে সংক্ষিপ্ত মানটি সেট করতে পারি?

Longমান সেট করার সময় আমি ব্যবহার করতে পারি setLongValue(100L)এবং এটি কার্যকর হয়। সুতরাং, Lএখানে অর্থ কি এবং Shortমূল্যের চরিত্রটি কী ?

ধন্যবাদ


Llongআক্ষরিক নির্দেশ করতে ব্যবহৃত একটি প্রত্যয় মাত্র ।
মিসিংফ্যাক্টর

উত্তর:


174

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

জাভা ভাষার স্পেসিফিকেশন বাইট বা সংক্ষিপ্ত প্রকারের জন্য একই সিনট্যাকটিক চিনি সরবরাহ করে না। পরিবর্তে, আপনি এটি সুস্পষ্ট কাস্টিং ব্যবহার করে যেমন ঘোষণা করতে পারেন:

byte foo = (byte)0;
short bar = (short)0;

আপনার setLongValue(100L)পদ্ধতির কলে, আপনাকে অগত্যা Lপ্রত্যয়টি অন্তর্ভুক্ত করতে হবে না কারণ এই ক্ষেত্রে ইন্ট আক্ষরিক স্বয়ংক্রিয়ভাবে দীর্ঘায়িত হয়। এটিকে জাভা ল্যাঙ্গুয়েজ স্পেসিফিকেশনে প্রসারিত আদিম রূপান্তর বলা হয়।


16
অন্যান্য ধরণের প্রত্যয়ও রয়েছে: d/ Dতৈরি করে doubleএবং f/ Fএকটি ভাসিয়ে তোলে!
জোছিম সউর

6
এছাড়াও: আকারের সাথে খাপ খালি আক্ষরিক কাস্ট করার দরকার নেই: আপনার দুটি উদাহরণ কাস্ট ছাড়াও কাজ করে।
জোচিম সৌর

আপনি উভয় ঠিক আছে। আমার আরও স্পষ্ট হওয়া উচিত ছিল যে আমি এখানে পূর্ণসংখ্যার আক্ষরিক কথা বলছি, ভাসমান-পয়েন্ট আক্ষরিক সম্পর্কে নয়।
লৌরী

4
@ জোয়াচিম: কেবল জে 5 + এর জন্য কোনও কাস্ট প্রয়োজন নেই; J2ME দুর্ভাগ্যক্রমে এখনও জে 4 এ রয়েছে (জে 4 এর একটি গুরুতরভাবে ছিটকে গেছে)।
লরেন্স ডল

2
@ জোছিমসৌয়ার, "আকারের সাথে ফিট করে" এর অর্থ কী? আমি জিজ্ঞেস করছি, কারণ আমি মাত্র বিশেষভাবে কাস্ট করার জন্য ছিল 0যেমন (short)0একটি কাছাকাছি পেতে possible lossy conversion from int to shortত্রুটি, যদিও 0 একটি ছোট।
ryvanage

34

বাইট বা সংক্ষিপ্ত আক্ষরিক এমন কোনও জিনিস নেই। আপনি সংক্ষিপ্ত ব্যবহার করে কাস্ট করা প্রয়োজন(short)100


9

সাধারণত আপনি ভেরিয়েবলটি ক পরিণত করতে পারেন short

আপনি এর মতো সমস্যাও পেতে পারেন যা বিভ্রান্তিকর হতে পারে। এটি হ'ল +অপারেটর একটিতে তাদের প্রচার করেint

এখানে চিত্র বর্ণনা লিখুন

উপাদানগুলি ingালাই সাহায্য করবে না:

এখানে চিত্র বর্ণনা লিখুন

আপনাকে এক্সপ্রেশনটি ফেলে দিতে হবে:

এখানে চিত্র বর্ণনা লিখুন


1
সংক্ষিপ্ত + শর্ট = ইনট করার কোনও কারণ ভুলে যাবেন না। দুটি শর্টের যোগফল যদি মেশিনের সর্বাধিক সংক্ষিপ্ত মানের চেয়ে বেশি হয় তবে এটিকে সংক্ষেপে কাস্ট করা অপ্রত্যাশিত ফলাফল আনতে পারে বা ল্যাঙ্গুজে সমর্থন করলে ব্যতিক্রম ঘটায়।
ডিজিওকো

2
এই যুক্তি দিয়ে, দুটি ints যুক্ত একটি দীর্ঘ ফিরে আসবে;)
ম্যাট

1
এবং আমি এটির জন্য খুঁজছি যদি আমার অঙ্কগুলি পূর্ণসংখ্যাকে ছাড়িয়ে যেতে পারে MA MAX_VALUE। আমি ইনট রিটার্নিংয়ের সিদ্ধান্তকে রক্ষা করছি না (যা সম্ভবত এইচডাব্লুউনটি আসলে অঙ্কগুলি সম্পাদন করে তার সাথে যুক্ত), আমি কেবল বলছি লোকেরা নিশ্চিত হওয়া উচিত যে ফলাফলটি সেখানে রাখার আগে খুব শীঘ্রই ফলাফলটি পূর্ণ হয়। আমি সংযুক্ত সংখ্যার আকারের কারণে সম্ভবত ক্যাপিংয়ের চেয়ে স্বল্প ধারণক্ষমতা ক্যাপ করার জন্য আরও বেশি বাগের মুখোমুখি হয়েছি। শর্ট ক্যাপ আপের জন্য 2 টি ছোট বাইট জাভা
রিজার্ভারগুলি

1
আমি আমার মন্তব্যটি আবার পড়েছি এবং আমি আমার বক্তব্য পরিষ্কার করেছিলাম না। প্রথম বাক্যটি বিভ্রান্তিকর এবং আমার এটি বলা উচিত ছিল না এবং কেবল বাকীটি রেখে দেওয়া হয়েছিল বলে মনে হচ্ছে দুটি সম্পর্কিত বিবৃতি রয়েছে short সংক্ষিপ্ত + সংক্ষিপ্ত হওয়ার পিছনে কারণটি এখানে পড়তে পারেন: ডকস.অরাকল.com / javase / specs/ jvms / se8 / html /… , জেভিএম-এর সংক্ষিপ্ততার জন্য কোনও যোগফল নেই। জাভা এর ইনট 32 বিট, এবং যখন এই সিদ্ধান্তগুলি তৈরি করা হয়েছিল, বেশিরভাগ কম্পিউটারগুলি 32 বিট ছিল, তাই আমার মনে হয় ভাল ধারণাটির মতো দেখাচ্ছিল।
ডিজিওকো

1
এছাড়াও মনে রাখবেন, যেমন এখানে ব্যাখ্যা stackoverflow.com/a/27123302/9465588 , জেভিএম আসলে serverse করেনি বর্গ ক্ষেত্র প্রতি তার ভার্চুয়াল মেমরি স্পেস অন্তত 32 বিট, এত ছোট ক্ষেত্র ঘোষণা আদৌ মেমরির সংরক্ষণ করা আছে। আমি জানিনা জাভা এটি পরিবর্তন করেছে কিনা।
ডিএওর

8

আপনি ব্যবহার করতে পারেন setTableId((short)100)। আমি মনে করি এটি জাভা 5 তে পরিবর্তিত হয়েছিল যাতে বাইট বা সংক্ষিপ্ত এবং নির্দিষ্ট লক্ষ্যের জন্য নির্ধারিত সংখ্যাসূচকটি স্বয়ংক্রিয়ভাবে লক্ষ্য প্রকার হিসাবে ধরে নেওয়া যায়। সর্বশেষ যে J2ME JVM গুলি জাভা 4 থেকে প্রাপ্ত হয়েছে যদিও।


PS: J2ME এর জন্য কোডিংয়ের মধ্যবয়সী ব্যথায় আটকে যাওয়ার জন্য আপনাকে স্বাগতম। ২০০০ সাল পর্যন্ত ডেস্কটপ ধরে হাতের কাছে থাকা ডিভাইসের জন্য অপেক্ষা করতে পারে না।
লরেন্স ডল

3
কোন "J4" (এবং কোন "J5" দয়া করে জাভা ভার্সন / এটি চেয়ে ইতিমধ্যে বিভ্রান্তিকর আর কোনো প্রকল্প নামকরণ করা
জোয়াকিম সয়ার

2
@ জোয়াচিম: জাভা 1, জাভা 2, জাভা 5, জাভা 6 এবং জাভা 7 সুপরিচিত এবং তাই উল্লেখ করা হয়েছে; জাভা 3 এবং জাভা 4 দ্বারা কী বোঝানো হবে তা এক্সট্রোপোলেট করা খুব কঠিন নয় " সমস্ত সংস্করণের জন্য সনের বর্তমান (এবং আশ্বাসের সাথে চূড়ান্ত) নাম গ্রহণ করা বিভ্রান্তি হ্রাস করে।
লরেন্স ডল

2
@ জোয়াচিম: এই বিষয়ে সানের শেষ কথা অনুসারে, শীর্ষস্থানীয় "১" জাভা "1.x" এর সাথে এমন আচরণ করা উচিত যে এটি আলোচনার সংস্করণগুলির উল্লেখ করার সময় কখনও ছিল না এবং কেবলমাত্র সামঞ্জস্যের জন্য জেভিএম দ্বারা নির্গত সংস্করণে ধরে রাখা হচ্ছে। সুতরাং, জাভা 2 সেই সংস্করণ যা আগে 1.2 হিসাবে পরিচিত ছিল, সেখান থেকে জে 2 এসই আসল (আপনি লক্ষ করবেন যে একই সময়ে সান আর জে 2 এক্স ই ব্যবহার না করে বরং জাভা, ই জাভা এবং জাভাএমই ব্যবহার করার পরামর্শ দিয়েছিল)। এটি অনুসরণ করে যে 1.3 জাভা 3, 1.4 জাভা 4, 1.5 1.5 জাভা 5, 1.6 জাভা 6 এবং 1.7 জাভা 7. গুরুতরভাবে, এটি যুক্তি খুঁজে পাওয়া খুব কঠিন নয়।
লরেন্স ডল

2
"1." জাভা 5 এবং পরে কেবল কাটা হয়েছিল । জাভা 1.0-1.4 সর্বদা সূর্যের দ্বারা এই নামটি দেওয়া হয় এবং এটি ইচ্ছাকৃতভাবে করা হয়েছে, কারণ সান জাভা ১.২ / জাভা ৫ পর্যন্ত জাভা ১.২ উল্লেখ করতে "জাভা ২" ব্যবহার করেছেন এটি খুব বিভ্রান্তিকর, তবে সুন কখনই ব্যবহার করেননি এমন নতুন নাম আবিষ্কার করা সহজতর করে না।
জোছিম সাউর
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.