วิธีตรวจสอบว่า int เป็นโมฆะหรือไม่


111

Personฉันมีวัตถุที่เรียกว่า

มันมีคุณสมบัติหลายอย่างอยู่ในนั้น

int id;
String name;

ฉันตั้งวัตถุบุคคลเช่นPerson p = new Person(1,"Joe");.

1. ) ฉันต้องการตรวจสอบว่าวัตถุนั้นไม่เป็นโมฆะหรือไม่ นิพจน์ต่อไปนี้ถูกต้องหรือไม่

if (person == null){
}

Or


if(person.equals(null))

2. ) ฉันต้องการทราบว่า ID มี Int หรือไม่

if(person.getId()==null){} 

แต่ java ไม่อนุญาต ฉันจะตรวจสอบได้อย่างไร?


10
ไม่ใช่เฉพาะ Java ประเภทดั้งเดิมไม่สามารถเป็นโมฆะได้ทุกที่
Rohit Jain

2
ใช่ค่าเริ่มต้นของintคือ0?
sharon Hwk

1
@sharon. ใช่มันเป็น 0 คุณสามารถใช้เช็ค0แทนได้ หากคุณต้องการทำการตรวจสอบค่าว่าง ใช้ Integer wrapper สำหรับสิ่งนั้น
Rohit Jain

3
ไม่ใช่ความคิดที่ดีที่จะใช้ int เพื่อแสดงรหัสประจำตัวเนื่องจากคุณไม่ได้ใช้เป็นจำนวนจริง - คุณไม่ต้องบวกหรือลบหรือคำนวณทางคณิตศาสตร์อื่น ๆ ลองใช้ String แทน
Hovercraft Full Of Eels

คำตอบ:


186

An intไม่เป็นโมฆะอาจเป็นได้0หากไม่ได้เริ่มต้น

หากคุณต้องการเป็นจำนวนเต็มจะสามารถที่จะเป็นโมฆะ, คุณจำเป็นต้องใช้แทนIntegerint

Integer id;
String name;

public Integer getId() { return id; }

นอกจากคำสั่งif(person.equals(null))จะไม่สามารถเป็นจริงได้เพราะถ้าpersonเป็นโมฆะNullPointerExceptionจะมีการโยนa ดังนั้นนิพจน์ที่ถูกต้องคือif (person == null)


@sharonHwk "person == null" น่าจะเป็นตัวเลือกที่ดีกว่า ถ้าบุคคลเป็นโมฆะจะไม่มีเมธอด "เท่ากัน" จากนั้น "person.equals (null)" จะพ่น
CodingFanSteve

"int ไม่ใช่ null อาจเป็น 0 หากไม่ได้เริ่มต้น" นั่นไม่ถูกต้อง 100% ตัวแปร int เป็นโลคัลจะไม่ถูกเตรียมใช้งาน
Emerica

แน่นอนว่าสำหรับตัวแปรภายในไม่สามารถยกเลิกการกำหนดค่าเริ่มต้นเป็นรหัสที่ไม่ถูกต้อง Java จะไม่อนุญาตตามที่ระบุไว้ในข้อกำหนด
Alex

49

primitives ไม่มีค่า null ค่าเริ่มต้นมีสำหรับ int คือ 0

if(person.getId()==0){}

ค่าเริ่มต้นสำหรับ primitives ใน java:

Data Type   Default Value (for fields)

byte                0
short               0
int                 0
long            0L
float           0.0f
double          0.0d
char            '\u0000'
boolean         false

วัตถุมีค่าว่างเป็นค่าเริ่มต้น

สตริง (หรือวัตถุใด ๆ ) ---> null

1. ) ฉันต้องการตรวจสอบว่าวัตถุนั้นไม่เป็นโมฆะหรือไม่ นิพจน์ต่อไปนี้ถูกต้องหรือไม่

if (person == null){
}

โค้ดด้านบนจะตรวจสอบว่าบุคคลนั้นเป็นโมฆะหรือไม่ คุณต้องทำ

if (person != null){ // checks if person is not null
}

และ

if(person.equals(null))

รหัสด้านบนจะทำให้ NullPointerException เมื่อบุคคลเป็นโมฆะ


ขอบคุณสิ่งนี้มีประโยชน์มาก
sharon Hwk

14

ดั้งเดิมintไม่สามารถเป็นค่าว่างได้ หากคุณต้องการ null ให้ใช้Integerแทน


3

1. ) ฉันต้องการตรวจสอบว่าวัตถุนั้นไม่เป็นโมฆะหรือไม่ นิพจน์ต่อไปนี้ถูกต้องหรือไม่

ถ้า (บุคคล == null) {}

ใช่ . นี่คือวิธีตรวจสอบว่าเป็นวัตถุnullหรือไม่

2. ) ฉันต้องการทราบว่า ID มี Int หรือไม่

ถ้า (person.getId () == null) {}

NOตั้งแต่idถูกกำหนดให้เป็นดั้งเดิมintก็จะมีการเริ่มต้นเริ่มต้นได้ด้วยและมันจะไม่เป็น0 nullไม่จำเป็นต้องตรวจสอบประเภทดั้งเดิมหากเป็นโมฆะ พวกเขาจะไม่เป็นโมฆะ ถ้าคุณต้องการคุณสามารถเปรียบเทียบกับค่าเริ่มต้นเป็น0if(person.getId()==0){}


0

คุณต้องเข้าถึง atributes ชั้นเรียนของคุณ

ในการเข้าถึง atributes คุณต้องทำ:

person.id
person.name

ที่ไหน

คน

เป็นตัวอย่างของบุคคลในชั้นเรียนของคุณ

สิ่งนี้สามารถทำได้หากสามารถเข้าถึง Attibutes ได้ถ้าไม่ได้คุณต้องใช้ setters และ getters ...


@RohitJain ฉันไม่ได้พูดแบบนั้นฉันบอกว่าไม่ถูกต้องที่จะถามหาคน == nul ถ้าเขาต้องการทราบว่า id เป็น "null" หรือไม่ เนื่องจาก id เป็น int เขาจึงไม่สามารถถามในแบบที่คุณแนะนำได้ ...
melli-182


0

ใน Java ไม่มีค่า Null สำหรับชนิดข้อมูลดั้งเดิม หากคุณต้องการตรวจสอบ Null ให้ใช้ Integer Class แทนประเภทดั้งเดิม คุณไม่จำเป็นต้องกังวลเกี่ยวกับความแตกต่างของประเภทข้อมูล Java แปลงข้อมูลชนิด int primitive เป็นจำนวนเต็ม เมื่อเกี่ยวกับหน่วยความจำ Integer ใช้หน่วยความจำมากกว่า int แต่ความแตกต่างของการจัดสรรหน่วยความจำไม่มีอะไรต้องพิจารณา

ในกรณีนี้คุณต้องใช้ Inter แทน int

ลองใช้ตัวอย่างด้านล่างและดูตัวอย่างสำหรับข้อมูลเพิ่มเติม

Integer id;
String name;

//Refer this example
    Integer val = 0;

`

if (val != null){
System.out.println("value is not null");
}

`

นอกจากนี้คุณสามารถกำหนด Null ดังต่อไปนี้

val = null;
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.