一个关于String深挖的问题

人生若如初见 发布于 2012/04/18 10:40
阅读 435
收藏 0

 String s= "Hello world";

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

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

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

加载中
0
xoHome
xoHome
这还是挖深? String类的源码你看过没? 里边就是一个char数组  这个0开始其实就是个数组索引
xoHome
xoHome
回复 @人生若如初见 : String和数组是没关系,但String也是一个对象,是JAVA对字符串的封装实现方式。原理上和C的char[]是一样的,内部执行的时候还是按照char数组来操作的,怎么会没关系? 我这里说的不是什么语义,而是实现原理,你去掉JavaAPI试试看还能不能用String?
人生若如初见
人生若如初见
String类型和数组是没有关系的
xoHome
xoHome
回复 @冬夜静思 : String的实现是对char数组的封装,没人说是等同,下标开始为0可以理解为操作char数组即可,为0设计应该是为了统一。
冬夜静思
String是个类,绝不能等同于一个字符数组,你可以把它理解为一个容器。 至于楼主提到的这个,只是设计的原则。
0
xpbug
xpbug
做程序员就要养成从0开始数数的习惯。哈哈,这就是定律。
0
中山野鬼
中山野鬼

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

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

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

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

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

0
leo108
leo108

当你已经习惯从0开始数数的时候,突然告诉你这里是从1开始的,你会怎么想?

0
Jeky
Jeky
也许更接近于人的思维,但是不接近于程序员的思维
0
deleted
deleted

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

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

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

引用来自“iceberg”的答案

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