پی بردن به حقیقت!- مکتب خونه- null empty
پی بردم که فرق null و empty رو تا حالا نمی دونستم!
null ینی تا حالا مقداردهی نشده empty ینی توش مقدار داره مقدار خالی!
واسه همینه که کد زیر تو لاگ می نوشته :
string winner: is null.
ولی تو if نمی رفته و شرطش false میشده
Log.d("folder string winner","is "+folder.getString("winner",null)+"."); if(folder.getString("winners",null).equals(null)){ Log.d("if workes","hiiii"); rr=new ranklist(); }
از equals در رشته ها برای مقدار رشته ای داخل اونا استفاده میشه برای بررسی null بودن هر شی باید از == استفاده کنید.
در مثال خودتون بهتره که وجود نداشت یه رشته خالی بده و بعد با isEmpty بررسیش کنید که خالی هست یا نه
مقدار null به این معنی هست که اصلا مقداری به شی مورد نظر داده نشده و empty یعنی یک رشته خالی داخلش قرار داده شده. وقتی از sharedpreference مقداری رو میگیریم یک defualtvalue وجود داره به این معنی که اگر رشته مورد نظر وجود نداشت چه چیزی رو باید برگردونه. اصولی اینه که بگیم که رشته خالی برگردون تا اینکه null بده.
============
توضیح جاواکاپ دامت برکاته :
سلام سوال بسیار خوبی را مطرح کردید.
فرض کنید که اول شرط خالی بودن را چک میکنید در حالی که رشته null است. بررسی خالی بودن یک رشته با فراخوانی متدهایی نظیر length یا isEmpty انجام میشود. در زبان جاوا اگر دسترسی به فیلد یا فراخوانی متد روی یک شی که null است انجام شود خطای NullPointerException پرتاب میشود که در این سوال باعث شکست تست میشود. اما اگر اول شرط null بودن چک شود، اگر رشته null باشد همان ابتدا عبارت شرطی به خاطر مفهوم اتصال کوتاه در عملگر && مقدار false را بر میگرداند (هنگامی که یکی از عملوندها در عملگر && مقدار false داشته باشد عبارت صرفه نظر از این که عملگر دیگر چیست false خواهد بود) و دیگر شرط خالی بودن اصلا اجرا و بررسی نمیشود که موجب خطای NullPointerException شود.