请问Length(S) = 0和S=''那个更快?(200分)

  • 主题发起人 主题发起人 prim
  • 开始时间 开始时间
P

prim

Unregistered / Unconfirmed
GUEST, unregistred user!
S是一个字符串,请问Length(S) = 0和S=''那个更快?我原来以为Length(S)=0比较快,
但是做了一个测试,却发现Length(S) = 0比S=''慢很多。
 
Length(S) = 0和S=''可比吗?
 
你要比较什么呢?
 
如果 s 是长字符串时,s = '' 更快,它只是比较 s 是否等于 nil。
 
应该没有区别吧?
 
有结果了!
以如下程序为例子

var s:string;
begin
s:='';
if s='' then;
if length(s)=0 then;
end;

其中
if s='' then;

cmp dword ptr [ebp-$04],$00

而 if length(s)=0 then;

mov eax,[ebp-$04]
call @lstrlen
test eax,eax

还调用了一个CALL,所以很明显 s=''是比 length(s) 快的.
 
自然是s:=''快,不用过程
 
s:=''快。
好多人都说了。
 
对,S=''快
 
当然 S=''快
 
那么用S[1]:=#0应该更快
 
应该是S=''快
 
s='' 比length(s)=0 快多了
 
当然 S=''快!
步骤就少一步!!!
 
//那么用S[1]:=#0应该更快
这样不安全,因为它不会修改 s 的储存长度(如果你了解其内部储存的话应该知道)
比如:
s := 'abcde';
showmessage(inttostr(length(s)));
s[2] := #0;
showmessage(inttostr(length(s)));
你会发现两次都是 5,因此,还是用 s := ''
更好
 
應該是s=''快吧。
Length(s)=0,首先length()其目的
是為了求得所含字符的個數,比s=''多
執行了過程中的語句。
 
应该是s=''快,它只要判断s[1]是否等于空就行了,而length(s)它得求出怎个字符串的长度再比较
 
to beta,
俺只说这种方法比较快,并没有说安全啊!很多快速的方法就是通过牺牲安全性来实现的!
 
s=''快,它只要判断s[1]是否等于空就行了
而length(s)它得求出怎个字符串的长度再比较
多一个过程哟……
 
后退
顶部