免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 5468 | 回复: 8
打印 上一主题 下一主题

[求助]String的startsWith()问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-05-05 16:16 |只看该作者 |倒序浏览
public boolean startsWith(String prefix, int toffset) {
    char ta[] = value;
    int to = offset + toffset;
    char pa[] = prefix.value;
    int po = prefix.offset;
    int pc = prefix.count;
    // Note: toffset might be near -1>>>1.

&nbsp;&nbsp;&nbsp;&nbsp;if ((toffset < 0) || (toffset > count - pc)) {
&nbsp;&nbsp;&nbsp;&nbsp;    return false;
&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;while (--pc >= 0) {
&nbsp;&nbsp;&nbsp;&nbsp;    if (ta[to++] != pa[po++]) {
&nbsp;&nbsp;&nbsp;&nbsp;        return false;
&nbsp;&nbsp;&nbsp;&nbsp;    }
&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;return true;
&nbsp;&nbsp;&nbsp;&nbsp;}


想问下朋友们,为什么这里能调用prefix的私有属性(prefix.value等)?

论坛徽章:
0
2 [报告]
发表于 2008-05-05 16:50 |只看该作者
startsWith()是String class的方法,value是String class的私有方法,能访问有什么奇怪的呢?

论坛徽章:
0
3 [报告]
发表于 2008-05-05 17:11 |只看该作者
原帖由 microjuz 于 2008-5-5 16:50 发表
startsWith()是String class的方法,value是String class的私有方法,能访问有什么奇怪的呢?


好象是这样的,我再看看..3ks

[ 本帖最后由 sh_royan 于 2008-5-5 17:17 编辑 ]

论坛徽章:
0
4 [报告]
发表于 2008-05-05 17:23 |只看该作者
class A{
&nbsp;&nbsp;&nbsp;&nbsp;private String str="";
&nbsp;&nbsp;&nbsp;&nbsp;public void t(A a){
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String s = a.str; //没问题

&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;public void tt(String s){
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;char[] cc = s.value; //报错

&nbsp;&nbsp;&nbsp;&nbsp;}
}


这样好象能表达我的问题..

论坛徽章:
0
5 [报告]
发表于 2008-05-06 10:01 |只看该作者
1.A class无法访问 B class的私有成员
2.A class 和 B class如果在一个包或者存在继承关系才可以访问protected成员
3.public 成员没有限制
4.以上都存在一个前提,A和B由同一个classloader完成装载

论坛徽章:
0
6 [报告]
发表于 2008-05-06 12:49 |只看该作者
原帖由 sh_royan 于 2008-5-5 17:23 发表
class A{
&nbsp;&nbsp;&nbsp;&nbsp;private String str="";
&nbsp;&nbsp;&nbsp;&nbsp;public void t(A a){
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String s = a.str; //没问题

&nbsp;&nbsp;&n ...

这是Java程序段吗?String 没有value这个属性啊

论坛徽章:
0
7 [报告]
发表于 2008-05-06 14:00 |只看该作者
原帖由 microjuz 于 2008-5-6 10:01 发表
1.A class无法访问 B class的私有成员
4.以上都存在一个前提,A和B由同一个classloader完成装载


1."私有成员"是以"类"为单位的?
也就是说"在 一个class A的实例 里访问 另一个class A的实例的私有成员 "是合法的?

一直以为是以实例为单位的..("一个class A的实例的私有成员 只有这个实例自己能访问"

4.这和classloader有和关系?

谢谢指教

ps:to楼上的朋友,value是String的私有属性

论坛徽章:
0
8 [报告]
发表于 2008-05-06 14:53 |只看该作者
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所装载的类彼此间是不可见的,书上叫命名空间是不同的,这个可以不用管他。

论坛徽章:
0
9 [报告]
发表于 2008-05-06 15:16 |只看该作者
ok,暂时先这样理解吧
classloader好象有N个级别,这个没深入研究过.
有空是要看看原理的书了,谢谢microjuz
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP