sh_royan
[求助]String的startsWith()问题
[table=95%][tr][td][font=FixedSys][color=#000000][color=#0000FF]public[/color] [color=#0000FF]boolean[/color] [color=#FF0000]startsWith[/color][color=#0000CC]([/color][color=#FF0000]String[/color] prefix[color=#0000CC],[/color] [color=#0000FF]int[/color] toffset[color=#0000CC])[/color] [color=#0000CC]{[/color]
[color=#0000FF]char[/color] ta[color=#0000CC][[/color][color=#0000CC]][/color] [color=#0000CC]=[/color] [color=#FF0000]value[/color][color=#0000CC];[/color]
[color=#0000FF]int[/color] to [color=#0000CC]=[/color] offset [color=#0000CC]+[/color] toffset[color=#0000CC];[/color]
[color=#0000FF]char[/color] pa[color=#0000CC][[/color][color=#0000CC]][/color] [color=#0000CC]=[/color] prefix[color=#0000CC].[/color][color=#FF0000]value[/color][color=#0000CC];[/color]
[color=#0000FF]int[/color] po [color=#0000CC]=[/color] prefix[color=#0000CC].[/color]offset[color=#0000CC];[/color]
[color=#0000FF]int[/color] pc [color=#0000CC]=[/color] prefix[color=#0000CC].[/color][color=#FF0000]count[/color][color=#0000CC];[/color]
[color=#FF9900]// Note: toffset might be near -1>>>1.
[/color]
[color=#0000FF]if[/color] [color=#0000CC]([/color][color=#0000CC]([/color]toffset [color=#0000CC]<[/color] 0[color=#0000CC])[/color] [color=#0000CC]|[/color][color=#0000CC]|[/color] [color=#0000CC]([/color]toffset [color=#0000CC]>[/color] [color=#FF0000]count[/color] [color=#0000CC]-[/color] pc[color=#0000CC])[/color][color=#0000CC])[/color] [color=#0000CC]{[/color]
[color=#0000FF]return[/color] false[color=#0000CC];[/color]
[color=#0000CC]}[/color]
[color=#0000FF]while[/color] [color=#0000CC]([/color][color=#0000CC]-[/color][color=#0000CC]-[/color]pc [color=#0000CC]>[/color][color=#0000CC]=[/color] 0[color=#0000CC])[/color] [color=#0000CC]{[/color]
[color=#0000FF]if[/color] [color=#0000CC]([/color]ta[color=#0000CC][[/color]to[color=#0000CC]+[/color][color=#0000CC]+[/color][color=#0000CC]][/color] [color=#0000CC]![/color][color=#0000CC]=[/color] pa[color=#0000CC][[/color]po[color=#0000CC]+[/color][color=#0000CC]+[/color][color=#0000CC]][/color][color=#0000CC])[/color] [color=#0000CC]{[/color]
[color=#0000FF]return[/color] false[color=#0000CC];[/color]
[color=#0000CC]}[/color]
[color=#0000CC]}[/color]
[color=#0000FF]return[/color] true[color=#0000CC];[/color]
[color=#0000CC]}[/color][/color][/font][/td][/tr][/table]
[size=4][color=DarkOrange]想问下朋友们,为什么这里能调用prefix的私有属性(prefix.value等)?[/color][/size]
sh_royan
[color=DarkOrange][/color][quote]原帖由 [i]microjuz[/i] 于 2008-5-5 16:50 发表 [url=http://bbs.chinaunix.net/redirect.php?goto=findpost&pid=8323511&ptid=1092020][img]http://bbs.chinaunix.net/images/common/back.gif[/img][/url]
startsWith()是String class的方法,value是String class的私有方法,能访问有什么奇怪的呢? [/quote]
好象是这样的,我再看看..3ks
[[i] 本帖最后由 sh_royan 于 2008-5-5 17:17 编辑 [/i]]
sh_royan
[table=95%][tr][td][font=FixedSys][color=#000000][color=#0000FF]class[/color] A[color=#0000CC]{[/color]
[color=#0000FF]private[/color] [color=#FF0000]String[/color] str[color=#0000CC]=[/color][color=#FF00FF]""[/color][color=#0000CC];[/color]
[color=#0000FF]public[/color] [color=#0000FF]void[/color] t[color=#0000CC]([/color]A a[color=#0000CC])[/color][color=#0000CC]{[/color]
[color=#FF0000]String[/color] s [color=#0000CC]=[/color] a[color=#0000CC].[/color]str[color=#0000CC];[/color] [color=#FF9900]//没问题
[/color]
[color=#0000CC]}[/color]
[color=#0000FF]public[/color] [color=#0000FF]void[/color] tt[color=#0000CC]([/color][color=#FF0000]String[/color] s[color=#0000CC])[/color][color=#0000CC]{[/color]
[color=#0000FF]char[/color][color=#0000CC][[/color][color=#0000CC]][/color] cc [color=#0000CC]=[/color] s[color=#0000CC].[/color][color=#FF0000]value[/color][color=#0000CC];[/color] [color=#FF9900]//报错
[/color]
[color=#0000CC]}[/color]
[color=#0000CC]}[/color][/color][/font][/td][/tr][/table]
[size=4][color=DarkOrange]这样好象能表达我的问题..[/color][/size]
caojiqun
[quote]原帖由 [i]sh_royan[/i] 于 2008-5-5 17:23 发表 [url=http://bbs.chinaunix.net/redirect.php?goto=findpost&pid=8323780&ptid=1092020][img]http://bbs.chinaunix.net/images/common/back.gif[/img][/url]
class A{
private String str="";
public void t(A a){
String s = a.str; //没问题
&n ... [/quote]
这是Java程序段吗?String 没有value这个属性啊
sh_royan
[quote]原帖由 [i]microjuz[/i] 于 2008-5-6 10:01 发表 [url=http://bbs.chinaunix.net/redirect.php?goto=findpost&pid=8326532&ptid=1092020][img]http://bbs.chinaunix.net/images/common/back.gif[/img][/url]
1.A class无法访问 B class的私有成员
4.以上都存在一个前提,A和B由同一个classloader完成装载 [/quote]
[size=4][color=DarkOrange]1."私有成员"是以"类"为单位的?
也就是说"在 [b]一个class A的实例[/b] 里访问 [b]另一个class A的实例的私有成员[/b] "是合法的?
一直以为是以实例为单位的..("一个class A的实例的私有成员 只有这个[b]实例自己[/b]能访问")
4.这和classloader有和关系?
谢谢指教:)
ps:to楼上的朋友,value是String的私有属性[/color][/size]
microjuz
1.这个,我说的不好,找个官方解释吧,你还是按你原来想的吧
if the member or constructor is declared private, then access is permitted if and only if it occurs within the body of the top level class (§7.6) that encloses the declaration of the member or constructor.
4.这个要看看inside vm这本书,java当初就是为网络应用设计的,为了保证安全性,无论是java语言本身还是vm的规范设计都设计了相关的很多特性,譬如不同的classloader所装载的类彼此间是不可见的,书上叫命名空间是不同的,这个可以不用管他。
sh_royan
[size=4]ok,暂时先这样理解吧
classloader好象有N个级别,这个没深入研究过.
有空是要看看原理的书了,谢谢[color=DarkOrange]microjuz[/color]:)[/size]