সি # এবং জাভা কেন '==' এর ডিফল্ট হিসাবে রেফারেন্স সমতা ব্যবহার করে?


32

আমি জাভা এবং সি # (এবং আমি নিশ্চিত অন্যান্য ভাষাগুলি) এর জন্য সাম্যের রেফারেন্সটির জন্য কেন ডিফল্ট তা কিছুক্ষণ চিন্তা করছি ==

আমি যে প্রোগ্রামিং করি সেগুলিতে (যা অবশ্যই প্রোগ্রামিং সমস্যার একটি ক্ষুদ্র উপসেট), রেফারেন্স সমতার পরিবর্তে বস্তুর তুলনা করার সময় আমি প্রায় সর্বদা লজিক্যাল সাম্য চাই। আমি ভাবতে চেষ্টা করছিলাম যে এই দুটি ভাষা কেন এটিকে উল্টানো এবং ==যৌক্তিক সমতা থাকার পরিবর্তে এবং .ReferenceEquals()রেফারেন্স সাম্যের জন্য ব্যবহার করার পরিবর্তে এই পথে চলেছে ।

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

যৌক্তিক তুলনা বাস্তবায়নের চেষ্টা করার সাথে আমি বিষয়গুলি সম্পর্কে অজ্ঞ হতে চাই না এবং এটি প্রতিটি শ্রেণিতে প্রয়োগ করা উচিত। আমি আরও বুঝতে পারি যে এই ভাষাগুলি অনেক আগে ডিজাইন করা হয়েছিল, তবে সাধারণ প্রশ্নটি দাঁড়িয়ে আছে।

এটিকে ডিফল্ট করার কিছু বড় সুবিধা রয়েছে যে আমি কেবল অনুপস্থিত, বা এটি কি যুক্তিসঙ্গত বলে মনে হয় যে ডিফল্ট আচরণটি যৌক্তিক সাম্য হওয়া উচিত, এবং রেফারেন্সের সাম্যের দিকে ফিরে এসে ডিফল্ট হওয়া এই শ্রেণীর জন্য একটি যৌক্তিক সাম্যতা বিদ্যমান নেই?


3
কারণ ভেরিয়েবলগুলি রেফারেন্স হয়? যেহেতু ভেরিয়েবলগুলি পয়েন্টারের মতো কাজ করে তাদের পক্ষে এটির মতো তুলনা করা বুদ্ধিমান হয়
ড্যানিয়েল গ্রেটজার

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

3
অন্য কথায়, আপনি কি জিজ্ঞাসা করছেন কেন সি # তে, আপনি যদি ওভাররাইড করেন তবে Equals()এটি স্বয়ংক্রিয়ভাবে এর আচরণ পরিবর্তন করে না ==?
সোভিক

উত্তর:


29

সি # এটি করে কারণ জাভা করেছে। জাভা করেছে কারণ জাভা অপারেটর ওভারলোডিং সমর্থন করে না। যেহেতু মান সমতাটি প্রতিটি শ্রেণীর জন্য পুনরায় সংজ্ঞায়িত করা উচিত, সুতরাং এটি অপারেটর হতে পারে না, পরিবর্তে এটি একটি পদ্ধতি হতে হয়েছিল। আইএমও এটি একটি বাজে সিদ্ধান্ত ছিল। এটি লেখার a == bচেয়ে পড়া এবং পড়া উভয়ের পক্ষে অনেক বেশি সহজ a.equals(b)এবং সি বা সি ++ অভিজ্ঞতার সাথে প্রোগ্রামারদের পক্ষে অনেক বেশি স্বাভাবিক তবে a == bপ্রায় সর্বদা ভুল। ==যেখানে .equalsপ্রয়োজনীয় ছিল সেগুলি থেকে বাগগুলি অগণিত হাজার হাজার প্রোগ্রামার ঘন্টা নষ্ট করেছিল।


7
আমি মনে করি অপারেটর ওভারলোডিংয়ের যত সমর্থক রয়েছেন ততই ডিটেক্টর রয়েছে, সুতরাং আমি এটির একটি নিখুঁত বিবৃতি হিসাবে বলতে পারি না "এটি একটি দুর্বল সিদ্ধান্ত ছিল"। উদাহরণ: আমি যে সি ++ প্রকল্পে কাজ করি তাতে আমরা ==অনেক ক্লাসের জন্য ওভারলোড করেছি এবং কয়েক মাস আগে আমি আবিষ্কার করেছি যে কয়েকটি বিকাশকারী ==আসলে কী করছে তা জানেন না। সবসময় এই ঝুঁকি থাকে যখন কিছু নির্মাণের শব্দার্থবিজ্ঞান স্পষ্ট না হয়। equals()স্বরলিপি আমাকে বলে যে আমি একটি কাস্টম পদ্ধতি ব্যবহার করছি এবং আমি কোথাও কীভাবে এটি দেখার আছে। নীচের লাইন: আমি মনে করি সাধারণভাবে অপারেটর ওভারলোডিং একটি উন্মুক্ত সমস্যা।
জর্জিও

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

14
a == bসি অভিজ্ঞতার সাথে প্রোগ্রামারদের আরও কীভাবে প্রাকৃতিক হতে পারে, যেহেতু সি ব্যবহারকারী-সংজ্ঞায়িত অপারেটর ওভারলোডিং সমর্থন করে না? (উদাহরণস্বরূপ, স্ট্রিংগুলির তুলনা করার সি উপায় হ'ল strcmp(a, b) == 0না a == b))
সোভিক

এটি মূলত আমি যা ভেবেছিলাম সেগুলিই, তবে আমি অনুভব করেছি যে আমি আরও অভিজ্ঞতার সাথে তাদের নিশ্চিত হয়ে জিজ্ঞাসা করব যে আমি কোনও স্পষ্ট কিছু মিস করছি না তা নিশ্চিত করার জন্য।
জিপার

4
@ এসভিক: সি তে, স্ট্রিং টাইপ বা রেফারেন্সের ধরণ নেই। স্ট্রিং অপারেশন মাধ্যমে সম্পন্ন হয় char *। এটি আমার কাছে স্পষ্ট বলে মনে হয় যে সমতার জন্য দুটি পয়েন্টারের তুলনা করা স্ট্রিং তুলনা হিসাবে একই নয়।
কেভিন ক্লিন

15

সংক্ষিপ্ত উত্তর: ধারাবাহিকতা

আপনার প্রশ্নের যথাযথ উত্তর দিতে, তবে আমি প্রস্তাব দিচ্ছি যে আমরা একটি পদক্ষেপ পিছনে নিয়েছি এবং প্রোগ্রামিং ভাষায় সমতা কী বোঝায় তার ইস্যুটি সন্ধান করব । কমপক্ষে তিনটি পৃথক সম্ভাবনা রয়েছে, যা বিভিন্ন ভাষায় ব্যবহৃত হয়:

  • রেফারেন্স সমতা : এর অর্থ হ'ল a = b সত্য হয় যদি a এবং b একই বস্তুর উল্লেখ করে। A এবং b বিভিন্ন অবজেক্টকে রেফার করে নিলে এটি সত্য হবে না, এমনকি ক এবং খ এর সমস্ত বৈশিষ্ট্য একই ছিল।
  • অগভীর সমতা : এর অর্থ হ'ল a = b সত্য হয় যদি ক এবং খ উল্লেখ করা হয় এমন বস্তুর সমস্ত বৈশিষ্ট্য অভিন্ন হয়। অগভীর সাম্যতা সহজেই দুটি বস্তুর প্রতিনিধিত্বকারী মেমরি স্পেসের বিটওয়াস তুলনা করে প্রয়োগ করা যেতে পারে। দয়া করে নোট করুন যে রেফারেন্স সাম্যতা অগভীর সাম্য বোঝায়
  • গভীর সমতা : এর অর্থ হ'ল a = b সত্য হয় যদি a এবং b এর প্রতিটি বৈশিষ্ট্য হয় অভিন্ন বা গভীর সমান হয়। দয়া করে নোট করুন যে গভীর সাম্যতা উভয়ই রেফারেন্স সাম্যতা এবং অগভীর সাম্যতা দ্বারা অন্তর্ভুক্ত। এই অর্থে, গভীর সমতা সাম্যতার দুর্বলতম রূপ এবং রেফারেন্স সাম্যতা সবচেয়ে শক্তিশালী।

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

অ-তুচ্ছ সিস্টেমগুলিতে, অবজেক্টের সাম্যতা প্রায়শই গভীর এবং রেফারেন্স সাম্যের মধ্যে কিছু হিসাবে সংজ্ঞায়িত হয়। আমরা একটি নির্দিষ্ট প্রসঙ্গে দুটি বস্তুকে সমান হিসাবে বিবেচনা করতে চাই কিনা তা যাচাই করার জন্য, আমাদের কিছু গুণাবলীর সাথে তুলনা করার প্রয়োজন হতে পারে যেখানে এটি স্মৃতিতে দাঁড়িয়ে রয়েছে এবং অন্যরা গভীর সাম্যতার সাথে দাঁড়িয়ে আছে, আবার কিছু বৈশিষ্ট্যগুলি সম্পূর্ণ আলাদা কিছু হতে পারে। আমরা সত্যিই যা চাই তা হ'ল একটি "সামনের ধরণের সাম্য", সত্যিই খুব সুন্দর, প্রায়শই বলা হয় সাহিত্যে শব্দার্থক সাম্য । আমাদের ডোমেনে জিনিসগুলি সমান হলে সেগুলি সমান। =)

সুতরাং আমরা আপনার প্রশ্নে ফিরে আসতে পারি:

এটিকে ডিফল্ট করার কিছু বড় সুবিধা রয়েছে যে আমি কেবল অনুপস্থিত, বা এটি কি যুক্তিসঙ্গত বলে মনে হয় যে ডিফল্ট আচরণটি যৌক্তিক সাম্য হওয়া উচিত, এবং যদি শ্রেণীর জন্য যৌক্তিক সাম্য না থাকে তবে রেফারেন্স সমতার দিকে ফিরে যেতে হবে?

আমরা যখন কোনও ভাষায় 'a == খ' লিখি তখন আমাদের অর্থ কী? আদর্শভাবে, এটি সর্বদা এক হওয়া উচিত: অর্থপূর্ণ সমতা। তবে এটা সম্ভব নয়।

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

var a = 1;
var b = a;
if (a == b){
    ...
}
a = 3;
b = 3;
if (a == b) {
    ...
}

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

var a = new Something(1);
var b = a;
if (a == b){
    ...
}
b = new Something(1);
a.DoSomething();
b.DoSomething();
if (a == b) {
    ...
}

আমরা আশা করি যে প্রথম 'যদি' সর্বদা সত্য হয় will তবে দ্বিতীয় 'যদি' তে আপনি কী আশা করবেন? এটা সত্যিই নির্ভর করে। 'ডসোমিংথিং' ক এবং বিয়ের (শব্দার্থক) সমতা পরিবর্তন করতে পারে?

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

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

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


2
When you see ‘a == b’ you should expect the same type of equality (from the 4 above) in all situations.জাভা ভাষা ডিজাইনারগণ বস্তুর জন্য রেফারেন্স সাম্যতা এবং আদিমদের জন্য শব্দার্থ সমতা ব্যবহার করেছিলেন। এটি আমার পক্ষে সুস্পষ্ট নয় যে এটি সঠিক সিদ্ধান্ত ছিল, বা ==বস্তুগুলির সিন্থেটিক সাম্যের জন্য অতিরিক্ত লোড হওয়ার অনুমতি দেওয়ার চেয়ে এই সিদ্ধান্তটি আরও "সামঞ্জস্যপূর্ণ" ।
চার্লস সালভিয়া

তারা আদিমদের জন্য "রেফারেন্সের সমতার সমতুল্য" ব্যবহার করেছিল। আপনি যখন "int i = 3" ব্যবহার করেন তখন সংখ্যার জন্য কোনও পয়েন্টার থাকে না, সুতরাং আপনি উল্লেখগুলি ব্যবহার করতে পারবেন না। স্ট্রিংগুলির সাথে, একটি "প্রকারের" আদিম ধরণের, এটি আরও স্পষ্ট: আপনি == (রেফারেন্স সাম্যতা) ব্যবহার করতে ".intern ()" বা সরাসরি অ্যাসাইনমেন্ট (স্ট্রিং s = "অ্যাবসি") ব্যবহার করতে হবে।
Hbas

1
PS: অন্যদিকে, সি # এর স্ট্রিংগুলির সাথে সামঞ্জস্যপূর্ণ ছিল না। এবং আইএমএইচও, এই ক্ষেত্রে, এটি আরও ভাল better
Hbas

@ চারেলসালভিয়া: জাভাতে, aএবং যদি bএকই ধরণের হয় তবে অভিব্যক্তিটি একই জিনিসটি রাখে এবং ধরে রাখে a==btests যদি তাদের মধ্যে একটিতে # 291 অবজেক্টের একটি রেফারেন্স থাকে এবং অন্যটির কাছে # 572 অবজেক্টের রেফারেন্স থাকে তবে তারা একই জিনিস রাখে না। বিষয়বস্তু বস্তুর # 291 এবং # 572 সমতুল্য হতে পারে, কিন্তু ভেরিয়েবল নিজেদের বিভিন্ন জিনিস রাখা। ab
সুপারক্যাট

2
@ চারলেসালভিয়া এটি এমনভাবে ডিজাইন করা হয়েছে যাতে আপনি এটি দেখতে a == bএবং দেখতে পারেন । অনুরূপভাবে, আপনি দেখতে পারেন a.equals(b)এবং যে একটি overloads অনুমান equals। যদি a == bকলগুলি a.equals(b)(যদি প্রয়োগ করা হয়), তবে এটি কি রেফারেন্সের সাথে বা বিষয়বস্তুর দ্বারা তুলনা করছে? মনে নেই? আপনাকে ক্লাস এ। পরীক্ষা করতে হবে কোডটি পড়ার জন্য আর তত দ্রুত নয় যদি আপনি নিশ্চিত হন না যে কী বলা হচ্ছে। এটি এমন হবে যেন একই স্বাক্ষরযুক্ত পদ্ধতিগুলির অনুমতি দেওয়া হয়েছিল এবং যে পদ্ধতিটি বলা হচ্ছে তা বর্তমান স্কোপটি কী তার উপর নির্ভর করে। এই জাতীয় প্রোগ্রামগুলি পড়া অসম্ভব হবে।
নিল

0

আমি ভাবতে চেষ্টা করছিলাম যে এই দুটি ভাষা কেন এটিকে উল্টানো এবং == যুক্তিযুক্ত সাম্য হওয়া এবং পরিবর্তনের পরিবর্তে এই রুটে চলেছে reference

কারণ পরবর্তী পদ্ধতি বিভ্রান্তিকর হবে। বিবেচনা:

if (null.ReferenceEquals(null)) System.out.println("ok");

এই কোডটি মুদ্রণ করা "ok"উচিত, না এটি একটি নিক্ষেপ করা উচিত NullPointerException?


-2

জাভা এবং সি # এর জন্য সুবিধাটি তাদের অবজেক্ট ওরিয়েন্টেড হওয়ার মধ্যে রয়েছে।

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

যৌক্তিক দৃষ্টিকোণ থেকে - অন্যের সাথে কোনও বস্তুর সমতা সমতার জন্য বস্তুর বৈশিষ্ট্যের সাথে তুলনা করার মতো সুস্পষ্ট হতে হবে না (উদাহরণস্বরূপ নাল == নালকে কীভাবে যৌক্তিকভাবে ব্যাখ্যা করা যায়? এটি ক্ষেত্রে ক্ষেত্রে ক্ষেত্রে পৃথক হতে পারে)।

আমি মনে করি এটি কীভাবে উত্থিত হয়, এটি আপনার পর্যবেক্ষণ যে "আপনি সর্বদা রেফারেন্সের সমতার তুলনায় যৌক্তিক সাম্য চান"। ভাষা ডিজাইনারদের মধ্যে Theকমত্য সম্ভবত বিপরীত ছিল। প্রোগ্রামিং অভিজ্ঞতার বিস্তৃত বর্ণালীটির অভাব থেকে আমি ব্যক্তিগতভাবে এটির মূল্যায়ন করা কঠিন বলে মনে করি। মোটামুটিভাবে, আমি অপ্টিমাইজেশনের অ্যালগরিদমে রেফারেন্স সাম্যতা বেশি এবং ডেটা-সেটগুলি পরিচালনা করতে লজিক্যাল সাম্যতা বেশি ব্যবহার করি।


7
রেফারেন্স সাম্যের কোনও বিষয়-অভিমুখীকরণের সাথে কোনও সম্পর্ক নেই। একেবারে বিপরীত, আসলে: অবজেক্ট-ওরিয়েন্টেশনের মৌলিক বৈশিষ্ট্যগুলির মধ্যে একটি হ'ল বস্তুগুলির সাথে একই আচরণ রয়েছে যা পার্থক্য করতে পারে না। একটি বস্তু অবশ্যই অন্য একটি বস্তুর অনুকরণ করতে সক্ষম হবে। (সর্বোপরি, ওও সিমুলেশনের জন্য উদ্ভাবিত হয়েছিল!) রেফারেন্স সাম্যতা আপনাকে একই আচরণযুক্ত দুটি পৃথক বস্তুর মধ্যে পার্থক্য করতে দেয়, এটি আপনাকে একটি সিমুলেটেড বস্তু এবং একটি বাস্তবের মধ্যে পার্থক্য করতে দেয়। সুতরাং, রেফারেন্স ইক্যুয়ালিটি অবজেক্ট-ওরিয়েন্টেশনকে ভেঙে দেয় । একটি ওও প্রোগ্রাম অবশ্যই রেফারেন্স সমতা ব্যবহার করা উচিত নয়
Jörg W Mittag

@ জার্গডব্লিউমিটাগ: অবজেক্ট-ওরিয়েন্টেড প্রোগ্রামটি সঠিকভাবে করার জন্য এটির রাষ্ট্র Y এর সমান কিনা এটির জন্য বস্তুর এক্স জিজ্ঞাসা করার একটি উপায় থাকতে পারে [সম্ভাব্য ক্ষণস্থায়ী অবস্থার], এবং এটি X এর সাথে সমান কিনা তা অবজেক্টকে জিজ্ঞাসা করার উপায়ও রয়েছে [এক্স কেবলমাত্র তার রাজ্যের সাথে Y এর সমতুল্য সমান হওয়ার গ্যারান্টিযুক্ত হলে Y এর সমতুল্য]। সমতা এবং রাষ্ট্র-সমতার জন্য পৃথক ভার্চুয়াল পদ্ধতি থাকা ভাল তবে অনেক ধরণের ক্ষেত্রে, উল্লেখের বৈষম্য অ-সমতা বোঝায় এবং এটি প্রমাণ করার জন্য ভার্চুয়াল পদ্ধতি প্রেরণের জন্য সময় ব্যয় করার কোনও কারণ নেই।
সুপারক্যাট

-3

.equals()ভেরিয়েবলগুলি তাদের সামগ্রীর সাথে তুলনা করে। পরিবর্তে ==তার বিষয়বস্তু দ্বারা বস্তুর তুলনা ...

অবজেক্ট ব্যবহার আরও সঠিক ব্যবহার .equals()


3
আপনার অনুমানটি ভুল। .equals () যা কিছু করে qu এটি সাধারণত বিষয়বস্তু দ্বারা হয়, তবে এটি হতে হবে না। এছাড়াও .equals () ব্যবহার করা আরও সঠিক নয়। এটি কেবল আপনি কী অর্জন করার চেষ্টা করছেন তার উপর নির্ভর করে।
জিপার
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.