java基础---->String类
来源:互联网 发布:nina dobrev 知乎 编辑:程序博客网 时间:2024/04/25 00:17
String类
匿名对象
new Person("张三",30).tell() ;
由于匿名对象没有对应的栈内存所指向,所以使用一次之后就等待被垃圾回收了。
1、String在使用中有两种实例化的方法。
一种是采用直接赋值(将字符串赋String的对象),
String str = "Hello" ; //定义一个字符串
第二种方法是通过构造方法完成实例化的操作,
String str = new String("Hello"); //定义一个字符串
一个字符串就是一个String的匿名对象
区别:
第一种 String str = "Hello" ;按照之前的理解,现在肯定是将一个字符串的堆空间的地址给str,所以图形如下:
此时的代码中,只在堆内存中开辟了一块空间,但是如果现在是第二种方式:
String str = new String("Hello") ;使用构造方法进行对象实例化的时候,由于内部的字符串属于匿名对象的原因,所以将产生两块堆内存空间,其中有一块将成为垃圾。
除了内存空间的少之外,如果使用了直接赋值现在还有另外一种好处,就是如果以后如果再声明了与之一样的字符串的话,则不会再重新开辟新的内存空间。
public class StringDemo { public static void main(String args[]){ String str1 = "hello" ; String str2 = "hello" ; String str3 = "hello" ; System.out.println("str1 == str2 --> " + (str1==str2)) ; // true System.out.println("str1 == str3 --> " + (str1==str3)) ; // true System.out.println("str2 == str3 --> " + (str2==str3)) ; // true }};
此时返回的结果都是true,所以很明显,以上的三个String的对象都同时指向同一个堆内存空间的“hello”字符串,那么如果使用的是构造方法赋值的话,根本不可能实现此效果。
之所以内容会相等,是因为在JAVA底层中存在了一个字符串的对象池,每次的内容都会从池中取出,如果内容已经存在了,则使用已经存在的,如果不存在,则会生成一个新的,放入池中,属于共享设计模式。
由于这种原因,只要是使用String类的话,永远都要采用直接赋值的方式完成。
2、字符串的比较
只要是字符串的比较操作就统一都使用equals()方法完成。
两种比较的区别:==和equals()
· ==:用于数值比较,比较的是两个字符串的地址值
· equals():用于内容的比较,比较两个字符串的内容是否相等
3、字符串的内容一旦声明则不可改变
一个字符串肯定是保存在堆内存之中的,所以一旦一个字符串声明之后,则无法改变。
public class StringDemo08 { public static void main(String args[]){ String str = "hello" ; str = str + " world" ; str += " !!!" ; System.out.println(str) ; }};
通过内存图可以发现一点,每一个字符串的内容原本并没有发生任何的改变,改变的是只一个字符串的内存地址的指向(断开旧连接,指向新连接),而且操作完成之后会发现有很多的垃圾产生,所以,以后对于频繁修改字符串的代码应该尽可能的回避,使用stringBuffer代替。
4、String类的相关操作
字符串与字符数组
No.
方法名称
类型
描述
1
public String(char[] value)
构造
将一个字符数组全部变为字符串
2
public String(char[] value,int offset,int count)
构造
将一个字符数组的指定范围的内容变为字符串
3
public char[] toCharArray()
普通
将字符串变为字符数组
4
public char charAt(int index)
普通
返回指定位置的字符
5
public int length()
普通
求出字符串的长度
字符串与字节数组:
No.
方法名称
类型
描述
1
public String(byte[] bytes)
普通
将字节数组变为字符串
2
public String(byte[] bytes,int offset,int length)
普通
将指定范围的字节数组变为字符串
3
public byte[] getBytes()
普通
将字符串变为字节数组
字符串比较
1
public boolean equalsIgnoreCase(String anotherString)
普通
忽略大小写的比较
字符串截取
1
public String substring(int beginIndex)
普通
从指定位置截取到末尾
2
public String substring(int beginIndex,int endIndex)
普通
截取指定范围的内容
判断字符是否存在
1
public int indexOf(String str)
普通
从头开始判断,如果找到则返回位置,找不到返回-1
2
public int indexOf(String str,int fromIndex)
普通
从指定位置开始查找,如果找到则返回位置,找不到返回-1
3
public boolean contains(String s)
普通
直接判断是否存在
字符串拆分
1
Public String[] split(String regex)
普通
按照指定字符串拆分
在进行字符串拆分的时候,如果发现有某些字符串无法拆分,则使用转义。
String str ="192.168.1.3" ;
String s[] =str.split("\\.") ;
字符串替换
1
public String replaceAll(String regex,String replacement)
普通
全部替换
2
public String replaceFirst(String regex,String replacement)
普通
替换第一个满足的内容
其他操作
No.
方法名称
类型
描述
1
public String toLowerCase()
普通
转小写
2
public String toUpperCase()
普通
转大写
3
public String trim()
普通
去掉左右空格
4
public boolean startsWith(String prefix)
普通
判断是否以指定的字符串开头
5
public boolean endsWith(String suffix)
普通
判断是否以指定的字符串
- java基础---->String类
- Java基础:String类
- Java基础String类
- Java基础:String类
- 【Java基础】String 类
- Java基础 String类
- Java基础类---String类
- java基础之String类
- Java基础<十>---> String类
- JAVA基础之String类
- java基础之String类
- java基础String/包装类
- Java基础—String类
- Java基础—String类
- Java基础day12 String类
- Java基础之String类
- Java基础之String类
- Java基础(String类)
- BFS-DFS
- 黑马程序员-多态(抽象类、组合设计模式、接口)、内部类学习
- poj 3083 Children of the Candy Corn
- 最新代码仓库
- Android软件开发之ListView 详解 (十一)
- java基础---->String类
- sed命令详解
- 探索ORACLE不完全恢复之--基于cancel的恢复 第二篇
- VS2010工具箱控件显示重复问题
- PL/SQL快捷方式
- poj3525 二分+半平面交
- 超链接的UILabel教程
- 测试过程必备成功要素
- %s 格式 数值数据,阻塞程序正常运行!(VC++开发应用程序小记)