我正在检查String.valueOf
方法,发现当null
传递给valueOf
时,它返回"null"
字符串而不是纯java null
。
我的问题是为什么有人会返回"null"
字符串,为什么不是纯java null
。
public static String valueOf(Object obj) {
return (obj == null) ? "null" : obj.toString();
}
我问这是因为开发人员必须使用equals
方法检查"null"
字符串,而不是stringObj != null
。
[更新]:好的,这个问题有投票,我不是在api中提出问题但是在我现在的公司中有很多api返回"null"
字符串而不是纯java null
这就是为什么我问这个问题,知道如果我们找到"null"
字符串对象,返回null
字符串是否是最佳做法。
答案 0 :(得分:10)
因为DocumentNotFound
返回了String.valueOf()
表示,String
的表示为null
。
开发人员根本不应该检查返回值,因为它用于显示目的,而不是用于检查引用是否为空。
答案 1 :(得分:3)
您正在寻找Objects#toString(java.lang.Object,java.lang.String)
通话
Objects.toString(obj,null)
当对象为null时返回null。
答案 2 :(得分:0)
因为你只需要null
的字符串表示,所以它确实如此。
此方法的目的是返回String表示形式。
检查链接String.valueOf
答案 3 :(得分:0)
我只会使用 .model tiny
.code
org 100h
start:
; Inicializando la fecha para LotusWorks
mov ax, 2A21h
int 21h
mov [Reg_DX], dx
sub cx,064h
mov [Reg_CX], cx
; saving old interrupt vector
mov ax, 3521h
int 21h
mov [old_int21h], bx
mov [old_int21h + 2], es
; setting new interrupt vector
cli
push ds
push cs
pop ds
lea dx, myint21h
mov ax, 2521h
int 21h
pop ds
sti
; TSR
mov dx, 00ffh
mov ax, 3100h
int 21h
; here comes data & hew handler part
old_int21h dw ?, ?
Reg_DX dw ?, ?
Reg_CX dw ?, ?
myint21h proc
cmp ah,2ah
jne S1
cmp al,56h
je S2
mov ah,02h
int 01AH
cmp cx,0
jne Mismodia
mov ax,02A56h
int 21h
mov [CS:Reg_DX], dx
MismoDia:
mov cx, [cs:Reg_CX]
mov al,00
mov dx, [cs:Reg_DX]
iret
S2:
mov al,0
S1:
; transfer control to an old
; interrupt 21h handler
push word ptr [cs:old_int21h + 2] ; segment
push word ptr [cs:old_int21h] ; offset
retf
myint21h endp
end start
直接显示内容。它没有提供足够强大的验证和健全性检查,无法将输出直接传递到数据库中,并可能导致数据不完整或数据损坏。
使用以下查询,我发现列中存在空值。
valueOf