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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 黑马--张帅 初级黑马   /  2012-9-2 21:33  /  2555 人查看  /  17 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 黑马--张帅 于 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依次减一个“*”呢?

17 个回复

倒序浏览
兄弟,你是不是理解错了,String初始化之后,长度是不能改变的,只能更改值
你这段代码的意思是把s引用指向了另一个对象,
而你想他要把s的长度变短,那是无法实现的
回复 使用道具 举报
建立一个StringBuilder对象进行操作,最后用toString方法转成字符串。
回复 使用道具 举报
我定义的是一个字符串变量,程序也实现了s变量的增长,我应该没理解错吧!至于你说的估计是String类里面的东西了,我还没学到那里。
回复 使用道具 举报
王金科 发表于 2012-9-2 21:50
兄弟,你是不是理解错了,String初始化之后,长度是不能改变的,只能更改值
你这段代码的意思是把s引用指向了另 ...

我定义的是一个字符串变量,程序也实现了s变量的增长,我应该没理解错吧!至于你说的估计是String类里面的东西了,我还没学到那里。
回复 使用道具 举报
  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. }
复制代码
看看这个能行不?

点评

你这个方法是取出子集,而s的"*****"实际上没有改变  发表于 2012-9-2 22:10
回复 使用道具 举报
杨卫腾 发表于 2012-9-2 22:02
看看这个能行不?

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

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

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

而StringBuffer和StringBuilder有添加和删除的方法
回复 使用道具 举报
黑马--张帅 发表于 2012-9-2 22:09
可以了!我还没学到String类那里,方法substring(){}是不是String中的?

嗯, 就是的,这个方法取的是 s 的子集。
回复 使用道具 举报
王金科 发表于 2012-9-2 22:15
建议楼主看看API文档,String里并没有往里面添加元素和删除元素的方法哦

而StringBuffer和StringBuilder ...

其实我本来想问的问题是这个。
回复 使用道具 举报
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:32
public class Test {
        public static void main(String[] args){
          String s = "*****";

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

请教一下,你的代码是怎么发成那样的
回复 使用道具 举报
刘岩喜 发表于 2012-9-3 22:52
请教一下,你的代码是怎么发成那样的

发帖是把你的代码放到那个代码框中即可   就是上边的<>中。
回复 使用道具 举报
杨卫腾 发表于 2012-9-3 23:24
发帖是把你的代码放到那个代码框中即可   就是上边的中。

了解了,thanks
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马