13
回答
一个关于String深挖的问题
注册华为云得mate10,2.9折抢先购!>>>   

 String s= "Hello world";

String sub=s.subString(6);//sub=world

String sub1=s.subString(1,5);//sub1=ello

这里我们都习惯地从0开始数,但这个并不是数组,为什么要从0开始数呢?从1开始不是更接近人的思维么。。。

<无标签>
举报
共有13个答案 最后回答: 6年前
这还是挖深? String类的源码你看过没? 里边就是一个char数组  这个0开始其实就是个数组索引
--- 共有 4 条评论 ---
xoHome回复 @人生若如初见 : String和数组是没关系,但String也是一个对象,是JAVA对字符串的封装实现方式。原理上和C的char[]是一样的,内部执行的时候还是按照char数组来操作的,怎么会没关系? 我这里说的不是什么语义,而是实现原理,你去掉JavaAPI试试看还能不能用String? 6年前 回复
人生若如初见String类型和数组是没有关系的 6年前 回复
xoHome回复 @冬夜静思 : String的实现是对char数组的封装,没人说是等同,下标开始为0可以理解为操作char数组即可,为0设计应该是为了统一。 6年前 回复
冬夜静思String是个类,绝不能等同于一个字符数组,你可以把它理解为一个容器。 至于楼主提到的这个,只是设计的原则。 6年前 回复

楼主,请教你个问题。我希望你用存储空间,可以描述两个不相同的情况,要求存储空间最小。

你觉得用二进制的存储空间,起步是采用0 好,还是1好。你能找出上述的合理解决方案,就能相同,为什么计算机编程空间都是从0开始的,

--- 共有 4 条评论 ---
i磊哥一个长度为2的数组,使用一个bit位就能表示其长度。要像楼主所说,岂不是需要两个bit位。楼主继续深思。 6年前 回复
中山野鬼回复 @人生若如初见 : 你描述两个不同信息,一个用0,一个用1,1个bit位的存储空间就可以。但是如果你,一个用1表示,一个用2表示,则需要2个bit位,对第一种情况需要 0b01,第二种情况需要 0b10.而正确有效的做法分别是 0b0,0b1 6年前 回复
人生若如初见不能够理解,我的理解是1和2占用的存储空间是一样的啊,一个是01,一个是10,这在计算机看来大小是一样的。他们是同一类型。 6年前 回复
无聊的人们啊这个回答有点哲理! 6年前 回复

推荐你看<c缺陷与陷阱>一书的"边界计算与不对称边界"一章,虽然是关于c的,但java是基于c的,下标以0这种设计也是从c沿袭过来的,一方面是因为指针的偏移量与下标相同所以以0为开始.

这一章对于这种边界划定的问题剖析的相当透彻,

1, 约定俗成, 除了lua没见过下标从1开始的

2, 静态类型语言里, 如果下标是0, 声明一个数组最大是int32 maxvalue, 索引用的int32, 那访问数组最后一项需要int32 maxvalue+1, 会发生很欢乐的事的.........

解析字符串不就成了数组了嘛,它这样做是有道理的,只是你不习惯而已,取值按[startIndex,endIndex)记就是,省事多了。

引用来自“iceberg”的答案

解析字符串不就成了数组了嘛,它这样做是有道理的,只是你不习惯而已,取值按[startIndex,endIndex)记就是,省事多了。
+1 这个好记!
顶部