A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

10黑马币
问题类型:
java
问题描述:

@在第一次出现的时候是在3的位置,这个没错,可是在后面的时候我又创建了@的位置,

为什么在最后一次出现@的位置还是3了,请问这是为什么,不是说最后一次出现的位置吗?因该是2才对啊!
  1. String s1 = "gdh@qq.com";

  2. System.out.println(s1.substring(1,4));//包含1但不包含4;

  3. System.out.println(s1.indexOf("@"));

  4. System.out.println(s1.substring(2,6));
  5. System.out.println(s1.lastIndexOf("@")); //最后一个出现的位置;
复制代码



最佳答案

查看完整内容

因为String是不可变的,无论你怎么截取,s1还是原来的s1,除非你把截取的新字符串重新赋值给另一个变量,否则,s1永远都是最原始的s1

29 个回复

倒序浏览
因为String是不可变的,无论你怎么截取,s1还是原来的s1,除非你把截取的新字符串重新赋值给另一个变量,否则,s1永远都是最原始的s1
回复 使用道具 举报
因为每次操作都没有赋值给s1,所以s1的值为gdh@qq.com,即@的位置还是3
回复 使用道具 举报
因为s1的值从来没变过
回复 使用道具 举报
substring的方法必须要赋值给那个变量后,才生效。等用=号接收才生效的(s1=s1.substring(1,4));
回复 使用道具 举报
在Java中string一旦定义就不可变。。
回复 使用道具 举报
总共就一个@ ,,最后一次出现的位置号不是和第一次出现的位置一样吗,是3,,不是2
回复 使用道具 举报
塞肥肥塞牙人 来自手机 中级黑马 2014-8-20 14:14:01
8#
String一定义就不会再改变   而且从来没有给S1赋过值
回复 使用道具 举报
代码没有重新创建@的位置,用的一直都是源代码S1
回复 使用道具 举报
涛哥,好问题,哈哈哈!

s1.substring(1,4) 是截取字符串“gdh@qq.com”,结果gh@q

05.System.out.println(s1.indexOf("@")); 这个结果是获取@位置是3,那为什么呢?因为他是从s1("gdh@qq.com")里面获取的,而不是从s1.substring(1,4)这个截取的值(即gh@q)里面取的,所以结果不是2;

同理,下面那个s1.substring(2,6)取的值是h@qq.c  ,那08.System.out.println(s1.lastIndexOf("@"));结果还是3呢,因为他获取的值是从s1(“gdh@qq.com”)里面取的,而不是从h@qq.c里面取,所以还是3,不是2;

那为什么会这样呢,因为,每次截取的字符串并没有赋值,意思是没有覆盖了原来的s1,所以,整个过程s1的值都没变,都是字符串“gdh@qq.com”;

如果每次将截取的值赋值给s1, 即s1 =s1.substring(1,4);或s1 =s1.substring(2,6);,像这样的话,结果就是楼主所说的情况了;


回复 使用道具 举报
滔哥 黑马帝 2014-8-20 14:36:47
11#
余攀 发表于 2014-8-20 14:21
涛哥,好问题,哈哈哈!

s1.substring(1,4) 是截取字符串“”,结果gh@q

测试这个功能啊!
回复 使用道具 举报
刘瑞 来自手机 中级黑马 2014-8-20 15:00:51
12#
不错,就是这样的
回复 使用道具 举报
你只是使用方法截取了String对象的一部分,并没有把返回的对象指向s1,所以s1还是指向初始化时的字符串对象
回复 使用道具 举报
String s1 = "gdh@qq.com";  String初始化之后就不能改变值了
回复 使用道具 举报
绕来绕去都是一样的,S1没有变化,@只出现了一次,都是3角标的位置
回复 使用道具 举报
呵呵 ,你知道S1的值并没有改变吗,你要这样写String s1 = s1.substring(2,6)这样就会改变;变量是要重新赋值的,你截取的是一个字符串,但是没有赋值给原来的变量
回复 使用道具 举报
以为去字符串是是从零开始,“@”下标数是3,所以就是3了
回复 使用道具 举报
你也是新手?
回复 使用道具 举报
对于s1调用它的函数subString,replace等方法,这些方法的返回值并没有赋值给s1
那么
s1这个String类型的指针并没有改变位置,他依然指向着常量池中"gdh@qq.com"的位置,
回复 使用道具 举报
s1 一直都没变化吧!
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 加入黑马