জাভাতে আমাকে বলা হয়েছে যে নাল চেক করার সময় একটিটি .equals () এর পরিবর্তে == ব্যবহার করা উচিত। এই জন্য কারণ কি কি?
জাভাতে আমাকে বলা হয়েছে যে নাল চেক করার সময় একটিটি .equals () এর পরিবর্তে == ব্যবহার করা উচিত। এই জন্য কারণ কি কি?
উত্তর:
তারা দুটি সম্পূর্ণ ভিন্ন জিনিস। ==
কোনও ভেরিয়েবল দ্বারা অন্তর্ভুক্ত থাকা অবজেক্ট রেফারেন্সের তুলনা করে। সাম্য বলতে কী বোঝায় তার চুক্তি অনুসারে .equals()
দুটি বস্তু সমান কিনা তা পরীক্ষা করে দেখুন । দুটি স্বতন্ত্র বস্তুর দৃষ্টান্ত তাদের চুক্তি অনুসারে "সমান" হওয়া সম্পূর্ণভাবে সম্ভব। এবং তারপরে ছোটখাটো বিশদ আছে যেহেতু equals
একটি পদ্ধতি, আপনি যদি কোনও null
রেফারেন্সে এটি চাওয়ার চেষ্টা করেন তবে আপনি একটি পাবেন NullPointerException
।
এই ক্ষেত্রে:
class Foo {
private int data;
Foo(int d) {
this.data = d;
}
@Override
public boolean equals(Object other) {
if (other == null || other.getClass() != this.getClass()) {
return false;
}
return ((Foo)other).data == this.data;
}
/* In a real class, you'd override `hashCode` here as well */
}
Foo f1 = new Foo(5);
Foo f2 = new Foo(5);
System.out.println(f1 == f2);
// outputs false, they're distinct object instances
System.out.println(f1.equals(f2));
// outputs true, they're "equal" according to their definition
Foo f3 = null;
System.out.println(f3 == null);
// outputs true, `f3` doesn't have any object reference assigned to it
System.out.println(f3.equals(null));
// Throws a NullPointerException, you can't dereference `f3`, it doesn't refer to anything
System.out.println(f1.equals(f3));
// Outputs false, since `f1` is a valid instance but `f3` is null,
// so one of the first checks inside the `Foo#equals` method will
// disallow the equality because it sees that `other` == null
public int data
?
Object
হ্যাঁ, এটি ডিফল্ট । যদিও এটি জেডিকে ক্লাসের একটি বিশাল সংখ্যক দ্বারা উপেক্ষা করা হয়েছে। তবে বিষয়টি বাস্তবায়ন সম্পর্কে নয়, এটি শব্দার্থবিদ্যার বিষয়ে। (পার্শ্ব দ্রষ্টব্য: জেডিকে 7 খুব পুরানো))
যদি আপনি ডাকা .equals()
উপর null
আপনি পাবেনNullPointerException
সুতরাং এটি প্রয়োগ করার পদ্ধতিটি প্রয়োগ করার আগে সর্বদা নালিশতা পরীক্ষা করার পরামর্শ দেওয়া হয়
if(str!=null && str.equals("hi")){
//str contains hi
}
এছাড়াও দেখুন
if ("hi".equals(str))
।
someObject.equals(null)
একটি বাড়িয়ে তুলবে NullPointerException
।
Objects.equals(a, b)
এটি নালপয়েন্টারএক্সেপশনকে বাড়িয়ে তুলবে না, তবে এটি এখনও "এ" এবং "বি" এর "সমান" পদ্ধতির উপর নির্ভর করে
গৃহীত উত্তর ছাড়াও ( https://stackoverflow.com/a/4501084/6276704 ):
জাভা 1.7 যেহেতু, আপনি যদি দুটি বস্তু যা শূন্য হতে পারে তার তুলনা করতে চান, তবে আমি এই ফাংশনটির প্রস্তাব দিচ্ছি:
Objects.equals(onePossibleNull, twoPossibleNull)
java.util.Objects
এই শ্রেণিতে অবজেক্টগুলিতে অপারেটিংয়ের জন্য স্ট্যাটিক ইউটিলিটি পদ্ধতি রয়েছে। এই ইউটিলিটিগুলির মধ্যে নাল-নিরাপদ বা নাল-সহনশীল পদ্ধতিগুলির সাথে কোনও বস্তুর হ্যাশ কোড গণনা করা, কোনও বস্তুর স্ট্রিং ফিরিয়ে দেওয়া এবং দুটি বস্তুর তুলনা করা অন্তর্ভুক্ত।
যেহেতু: 1.7
জাভাতে 0 বা নাল সরল ধরণের এবং অবজেক্ট নয়।
পদ্ধতিটি সমান () সাধারণ ধরণের জন্য নির্মিত হয় না। সাধারণ প্রকারের সাথে == মেলা যায়।
সূত্রের মতে ডিফল্ট পদ্ধতি প্রয়োগের জন্য কী ব্যবহার করা উচিত তা বিবেচ্য নয়:
public boolean equals(Object object) {
return this == object;
}
তবে আপনি equals
কাস্টম ক্লাসে নিশ্চিত হতে পারবেন না ।
equals
কেবলমাত্র ফিরে আসতে পারে false
বা কোনও কারণ হতে পারে NullPointerException
(বা ওভাররডেন equals
পদ্ধতিটি বাজে কথা হলে কিছু আলাদা )।
অবজেক্ট.ইক্যুয়ালগুলি নাল নিরাপদ, তবে সচেতন থাকুন যে দুটি বস্তু যদি নাল হয় তবে অবজেক্ট.ইক্যুয়ালগুলি সত্য ফিরে আসবে তাই নিশ্চিত হয়ে নিন যে আপনি অবজেক্টের সাথে তুলনা করছেন সেগুলি নাল নয় (বা নাল মানগুলি ধরে রাখবে) এর জন্য অবজেক্ট ব্যবহার করার আগে। তুলনা।
String firstname = null;
String lastname = null;
if(Objects.equals(firstname, lastname)){
System.out.println("equal!");
} else {
System.out.println("not equal!");
}
উপরে স্নিপেট সমান ফিরে আসবে!
সমান হ'ল অবজেক্ট বর্গ থেকে প্রাপ্ত একটি ফাংশন, এই ফাংশনটি শ্রেণীর আইটেমগুলির সাথে তুলনা করে। যদি আপনি এটি শূন্যের সাথে ব্যবহার করেন তবে এটি মিথ্যা কারণ দেখায় কারণ শ্রেণীর সামগ্রী নাল নয়। অতিরিক্ত == একটি বস্তুর রেফারেন্স তুলনা করে।
false
বা NullPointerException
(যদি equals
কোনও খারাপ কিছুকেই বেশি করা না হয়) হতে পারে।
এখানে একটি উদাহরণ যেখানে str != null
কিন্তু str.equals(null)
যখন ব্যবহারorg.json
JSONObject jsonObj = new JSONObject("{field :null}");
Object field = jsonObj.get("field");
System.out.println(field != null); // => true
System.out.println( field.equals(null)); //=> true
System.out.println( field.getClass()); // => org.json.JSONObject$Null
সম্পাদনা:
এখানে org.json.JSONObject $ নাল শ্রেণি:
/**
* JSONObject.NULL is equivalent to the value that JavaScript calls null,
* whilst Java's null is equivalent to the value that JavaScript calls
* undefined.
*/
private static final class Null {
/**
* A Null object is equal to the null value and to itself.
*
* @param object
* An object to test for nullness.
* @return true if the object parameter is the JSONObject.NULL object or
* null.
*/
@Override
public boolean equals(Object object) {
return object == null || object == this;
}
}
field.equals(null)
সত্য যে ফিরে আসে। এটি স্বাভাবিক জাভা আচরণ ভেঙে দেয় এবং তাই বিভ্রান্তিকর। এটি কেবলমাত্র field.equals("null")
আমার দৃষ্টিকোণে কাজ করা উচিত । লাইব্রেরি বিকাশকারীরা কেন ভেবেছিলেন তা আমি জানি না, এটি সমর্থন করা ভাল।
str != null
এবং str.equals(null)
রিটার্ন true
যখন ব্যবহার org.json ।"?
jsonObject
"ক্ষেত্র" কীটি কেন field
তাই নাল নয়, এটিতে একটি রেফারেন্স রয়েছে যা এতে json.org.JSONObject$Null
অবজেক্টটি রয়েছে
Null
মতো null
ব্যবহার করব "null"
না এবং এর পরিবর্তে ব্যবহার করব । তবে আমার ধারণা স্ট্রিংয়ের প্রয়োজনীয়তা এড়াতে তারা এটি করেছে। তবে এমনকি এই lib সঙ্গে, field.equals(null)
এখনও প্রায় সর্বদা একটি সমস্যা: পি।
আপনার কোড ডেমিটারের আইন ভঙ্গ করে। এ কারণেই নকশাকে নিজেই রিফ্যাক্টর করা ভাল। কার্যকারিতা হিসাবে, আপনি ptionচ্ছিক ব্যবহার করতে পারেন
obj = Optional.ofNullable(object1)
.map(o -> o.getIdObject11())
.map(o -> o.getIdObject111())
.map(o -> o.getDescription())
.orElse("")
উপরেরটি হ'ল কোনও অবজেক্টের হায়ারার্কি পরীক্ষা করা যা সহজভাবে ব্যবহার করুন check
Optional.ofNullable(object1)
আপনার যদি চেক করার একমাত্র অবজেক্ট থাকে
আশাকরি এটা সাহায্য করবে !!!!
আপনি সবসময় করতে পারে
if (str == null || str.equals(null))
এটি প্রথমে অবজেক্টের রেফারেন্স চেক করবে এবং তারপরে রেফারেন্সটি শূন্য নয় এমনটি নিজেই পরীক্ষা করবে check
x.equals(null)
।
equals()
দেখুন। আপনি যখন চেষ্টা করবেন তা তাত্ক্ষণিকভাবে স্পষ্ট হয়ে