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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© ld5128702 中级黑马   /  2013-4-13 19:02  /  1139 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 ld5128702 于 2013-4-14 00:09 编辑
  1. class Demo01
  2. {
  3.         public static void sop(String str)
  4.         {
  5.                 System.out.println(str);
  6.         }
  7.         public static void main(String args[])
  8.         {
  9.                 String str="         as  daf         ";
  10.                 sop("("+str+")");
  11.                 str=myTrim(str);//String定义的变量不是不能改变吗?这里算不算是呢?迷惑,求解释
  12.                 sop(str);
  13.         }
  14.         //练习一:去除字符串两端的空格
  15.         public static String myTrim(String str)
  16.         {
  17.                 int start=0,end=str.length()-1;
  18.                 while(start<=end&&str.charAt(start)==' ')
  19.                         start++;
  20.                 while(start<=end&&str.charAt(end)==' ')
  21.                         end--;
  22.                 return str.substring(start,end+1);
  23.         }

  24. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
张熙韬 + 1

查看全部评分

6 个回复

倒序浏览
String trim()
          返回字符串的副本,忽略前导空白和尾部空白。
你看看这句话,返回的是字符串的副本,而非字符符本身,你就可以理解为trim以后,就是一个新的字符串,当然,你这是自定义了一个MyTrim一个道理
回复 使用道具 举报
举个例子吧:
String  str = "字符串" ;  
这里的str是一个变量 只是把"字符串"的地址值赋值给了str而已
而"字符串"这个是不能再改变了。
str=myTrim(str);
调用函数处理只是把变量str的引用地址值改变了。
回复 使用道具 举报
public String substring(int beginIndex,
                        int endIndex)返回一个新字符串,它是此字符串的一个子字符串。该子字符串从指定的 beginIndex 处开始,直到索引 endIndex - 1 处的字符。因此,该子字符串的长度为 endIndex-beginIndex。
示例:

"hamburger".substring(4, 8) returns "urge"
"smiles".substring(1, 5) returns "mile"

参数:
beginIndex - 起始索引(包括)。
endIndex - 结束索引(不包括)。
返回:
指定的子字符串。
来自api  此方法返回一个新的字符串,你还用原来字符串的变量名接收的 ,这根本就是2个东西

评分

参与人数 1技术分 +1 收起 理由
张熙韬 + 1

查看全部评分

回复 使用道具 举报
本帖最后由 ①人←①城市 于 2013-4-13 21:10 编辑

String类是的本质是字符数组char[], 并且其值不可改变。private final char value[];

Java运行时会维护一个String Pool(String池),JavaDoc翻译很模糊“字符串缓冲区”。String池用来存放运行时中产生的各种字符串,并且池中的字符串的内容不重复。而一般对象不存在这个缓冲池,并且创建的对象仅仅存在于方法的堆栈区。
回复 使用道具 举报
创建字符串的方式很多,归纳起来有三类:
其一,使用new关键字创建字符串,比如String s1 = new String("abc");
其二,直接指定。比如String s2 = "abc";
其三,使用串联生成新的字符串。比如String s3 = "ab" + "c";

String对象的创建

String对象的创建也很讲究,关键是要明白其原理。
原理1:当使用任何方式来创建一个字符串对象s时,Java运行时(运行中JVM)会拿着这个X在String池中找是否存在内容相同的字符串对象,如果不存在,则在池中创建一个字符串s,否则,不在池中添加。

原理2:Java中,只要使用new关键字来创建对象,则一定会(在堆区或栈区)创建一个新的对象。

原理3:使用直接指定或者使用纯字符串串联来创建String对象,则仅仅会检查维护String池中的字符串,池中没有就在池中创建一个,有则罢了!但绝不会在堆栈区再去创建该String对象。

原理4:使用包含变量的表达式来创建String对象,则不仅会检查维护String池,而且还会在堆栈区创建一个String对象。

评分

参与人数 1技术分 +1 收起 理由
张熙韬 + 1

查看全部评分

回复 使用道具 举报
明白了,谢谢各位了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马