黑马程序员技术交流社区

标题: 字符串的一点小问题 [打印本页]

作者: 黑马--张帅    时间: 2012-9-2 21:33
标题: 字符串的一点小问题
本帖最后由 黑马--张帅 于 2012-9-2 22:26 编辑

今天做循环时遇到的一个小问题
class  Demo18
{
        public static void main(String[] args)
        {
                String s = "*****";
                for (int i=0;i<10 ;i++)
                {
                        s+="*";
                }
                System.out.println(s);

        }
}
//上面的程序可以实现String s依次加一个“*”,可不可以用转义字符让让String s依次减一个“*”呢?
作者: 王金科    时间: 2012-9-2 21:50
兄弟,你是不是理解错了,String初始化之后,长度是不能改变的,只能更改值
你这段代码的意思是把s引用指向了另一个对象,
而你想他要把s的长度变短,那是无法实现的
作者: 周兴华    时间: 2012-9-2 21:56
建立一个StringBuilder对象进行操作,最后用toString方法转成字符串。
作者: 黑马--张帅    时间: 2012-9-2 22:01
我定义的是一个字符串变量,程序也实现了s变量的增长,我应该没理解错吧!至于你说的估计是String类里面的东西了,我还没学到那里。
作者: 黑马--张帅    时间: 2012-9-2 22:02
王金科 发表于 2012-9-2 21:50
兄弟,你是不是理解错了,String初始化之后,长度是不能改变的,只能更改值
你这段代码的意思是把s引用指向了另 ...

我定义的是一个字符串变量,程序也实现了s变量的增长,我应该没理解错吧!至于你说的估计是String类里面的东西了,我还没学到那里。
作者: 杨卫腾    时间: 2012-9-2 22:02
  1. class  Demo18
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.                 String s = "*****";
  6.                 for (int i=5;i>0 ;i--)
  7.                 {
  8.                         s = s.substring(0,i);
  9.                         System.out.println(s);
  10.                 }       
  11.         }
  12. }
复制代码
看看这个能行不?
作者: 黑马--张帅    时间: 2012-9-2 22:09
杨卫腾 发表于 2012-9-2 22:02
看看这个能行不?

可以了!我还没学到String类那里,方法substring(){}是不是String中的?
作者: 王金科    时间: 2012-9-2 22:12
黑马--张帅 发表于 2012-9-2 22:02
我定义的是一个字符串变量,程序也实现了s变量的增长,我应该没理解错吧!至于你说的估计是String类里面 ...

你只是改变了s引用的指向
作者: 王金科    时间: 2012-9-2 22:15
黑马--张帅 发表于 2012-9-2 22:01
我定义的是一个字符串变量,程序也实现了s变量的增长,我应该没理解错吧!至于你说的估计是String类里面的 ...

建议楼主看看API文档,String里并没有往里面添加元素和删除元素的方法哦

而StringBuffer和StringBuilder有添加和删除的方法
作者: 杨卫腾    时间: 2012-9-2 22:19
黑马--张帅 发表于 2012-9-2 22:09
可以了!我还没学到String类那里,方法substring(){}是不是String中的?

嗯, 就是的,这个方法取的是 s 的子集。
作者: 黑马--张帅    时间: 2012-9-2 22:27
王金科 发表于 2012-9-2 22:15
建议楼主看看API文档,String里并没有往里面添加元素和删除元素的方法哦

而StringBuffer和StringBuilder ...

其实我本来想问的问题是这个。
作者: 武庆东    时间: 2012-9-2 22:32
public class Test {
        public static void main(String[] args){
          String s = "*****";
          int len=s.length()-1;
      for (int i=0;i<10 ;i++,len--)
      {      String sp="";
         
             for(int j=0;j<len;j++)
             {
                      sp=sp+"*";
                      
             }
            
            System.out.println(sp);
            
      }
               
      

        }

}

作者: 黑马--张帅    时间: 2012-9-2 22:36
武庆东 发表于 2012-9-2 22:32
public class Test {
        public static void main(String[] args){
          String s = "*****";

用转义字符做!!!:)
作者: 黑马-李勇    时间: 2012-9-3 17:24
StringBuilder是可以实现的,你说的转义字符做?
我百度了一下,转义字符就那几个,怎能做出来?
再有String s变定义 就不能改了。常量池中就会有,你能改变的也只是s的引用。
作者: 舒远    时间: 2012-9-3 22:35
字符串一旦创建,则内容是不能改变的。
但是你的程序的实现效果是因为s变量指向了不同的字符串对象,这些对象的值分别是不同数量的“*”组成的。看到的效果才是不断的减少。
其根本原因是s变量所指向的对象的地址发生了变化。如果这个不能理解,那么将会很难理解对象的引用也就是地址是怎么回事了。
字符串是引用类型。引用存放在栈内存中,实际值存放在堆内存中。通过引用指向堆内存的实际值。你的程序实现的效果就是这个引用不断的切换,因为地址换了。它所得到的值才发生了变化。
作者: 刘岩喜    时间: 2012-9-3 22:52
杨卫腾 发表于 2012-9-2 22:02
看看这个能行不?

请教一下,你的代码是怎么发成那样的
作者: 杨卫腾    时间: 2012-9-3 23:24
刘岩喜 发表于 2012-9-3 22:52
请教一下,你的代码是怎么发成那样的

发帖是把你的代码放到那个代码框中即可   就是上边的<>中。
作者: 刘岩喜    时间: 2012-9-3 23:27
杨卫腾 发表于 2012-9-3 23:24
发帖是把你的代码放到那个代码框中即可   就是上边的中。

了解了,thanks




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2