博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
String类
阅读量:4581 次
发布时间:2019-06-09

本文共 3056 字,大约阅读时间需要 10 分钟。

String

 

 “==”与“equals()”的区别

 

“==” java提供的关系运算符,主要功能是进行数值相等判断的,如果用在了String对象上,表示的是内存地址数值的比较;

 

equals”是由String提供的一个方法,负责进行字符串内容的比较

 

 在开发时,如果要判断输入的内容是否是某一字符串,应将字符串写在最前面

 

 String的两种实例化方式区别:

 

方式一:直接赋值 String str = “hello”;

方式二:构造方法  String str = new String(“hello”);

 

问:采用方式一

String stra = “hello”;

String strb = “hello”;

String strc = “world”;

 

System.out.println(stra==strb)   //true

System.out.println(stra==strc)   //false

 

共享设计模式:

JVM的底层实际上会存在一个对象池(不一定只保存String对象),当代码之中使用了直接赋值的方式定义了一个String 类对象时,会将此字符串对象所使用的匿名对象入池保存。而后如果后续还有其他String类对象也采用了直接赋值的方式,并且设置了同样内容的时候,那么将不会开辟新的堆内存空间,而是使用已有的对象进行引用的分配,从而继续使用。

 

方式二,使用构造方法实例化对象,一定要使用关键字new,一旦使用了new就表示要开辟新的堆内存空间。

String str = new String(“hello”);

 

“hello” 匿名对象,开辟堆内存空间

new  再开辟一个堆内存空间

 

总结: 如果使用的是构造方法进行String类对象的实例化的时候,那么最终的操作形式就变成了开辟两块堆内存空间(其中有一块堆内存空间将成为垃圾空间)。

 

除了内存的浪费之外,如果使用了构造方法定义的String类对象,其内容不会保存在堆内存,因为使用了关键字new开辟的心内存。如果现在希望开辟的新内存数据也可以进行对象池的保存,那么可以采用String类定义的一个手工入池的方法:public String intern();

 

 

 

Eg:

String stra = new String(“hello”).intern()//使用构造方法定义了新的内存空间而后入池

String strb = “hello”;

System.out.println(stra==strb);  //true

 

直接赋值:只会开辟一块堆内存空间,并且会自动保存在对象池之中以供下次重复使用

构造方法:会开辟两块堆内存空间,其中有一块会成为垃圾,并且不会自动入池,但是用户   可以使用intern()方法手动入池;

 

 

String类的特点:

1.String类对象的相等判断使用equals方法完成,“==”实现的是地址数值比较

2.字符串内容一旦声明则不可改变,String类对象内容的改变是依靠引用关系的变更实现的。

3.String类有两种实例化方式,使用直接赋值可以不产生垃圾空间,并且可以自动入池,不 要使用构造方法实例化

 

 

字符与字符串:

public String(char[] value)  构造  将字符数组变为String类对象

public String(char[] value,int offset, int count) 构造 将部分字符数组变成String 类对象

public char charAt(int index) 普通 取得指定下标的字符

public char[] toCharArray() 普通   将字符串变成字符数组

 

字节与字符串

字节使用byte描述,使用字节一般主要用于数据的传输或者进行编码转换的时候使用

 

public String(byte[] bytes)

public String(byte[] bytes, int offset, int length)

public byte[] getBytes()

public byte[] getBytes( charsetName)  throws

 

 

字符串比较

public boolean equals(String anObject)

public boolean equalsIgnoreCase( anotherString)

 

 

public int compareTo( anotherString)

判断两个字符串的大小,按照字符编码比较。此方法的返回值有三种结果:

1. = 0 表示要比较的两个自发性内容相等

2. > 0 表示大于的结果

3. < 0 表示小于的结果

String str1 = Hello;

String str2 = HEllo;

Str1.compareTo(str2)  =32

 

查找字符串的方法

public boolean contains(String s)

public int indexOf( str) 由前向后查找指定字符串的位置,如果找到了则返回(第一个字母)位置的索引,没找到则返回-1

 

public int indexOf(int ch,int fromIndex) //由指定位置从前向后查找指定字符串的位置,找不到则返回-1

public int lastIndexOf( str) //由后向前查找

public int lastIndexOf( str,int fromIndex) //由指定位置从后向前。。

public boolean startsWith( prefix)

public boolean endsWith( suffix)

 

 

 

 

 

字符串替换

public  replaceAll( regex, replacement)

public  replaceFirst( regex, replacement)

 

Eg:

 

 

String str = "helloworld";

String resultA = str.replaceAll("l","9");
String resultB = str.replaceFirst("l","9");
System.out.println(resultA); //he99owor9d
System.out.println(resultB); //he9loworld

 

 

字符串截取

public  substring(int beginIndex)//从指定索引截取到结尾

public  substring(int beginIndex, int endIndex)

//截取部分子字符串的部分 (索引从0开始)

不能使用负数作为下标

 

 

字符串拆分

public [] split( regex)

public [] split( regex,int limit)//部分拆分,如果能拆成很多部分,照数组的长度由limit决定

 

如果“hello world see you”.split(“”)此时按空字符串拆分(不是空格),表示按照每一个字符进行拆分

 

如果是一些敏感字符(正则标记)严格来讲是拆分不了的,如果真的遇见则用 “\\”(转义)侯进行拆分

 

trim() 去掉前后的空格,中间空格不处理

转载于:https://www.cnblogs.com/kerrys/p/7095103.html

你可能感兴趣的文章
chr()//ord() //进制转换函数//eval()//文件函数//split()
查看>>
第一章 Java程序设计概述
查看>>
定时调动 (项目保留备份代码码)
查看>>
Leetcode-Divide Two Integers
查看>>
HTML 首页倒三角形导航块
查看>>
每天一道Java题[9]
查看>>
结对编程2——单元测试
查看>>
python 函数/列表的应用
查看>>
C#与MES
查看>>
LR接口测试---Java Vuser之jdbc查询(调试前)
查看>>
SQL Server 各版本安装包分享
查看>>
.net项目移植后的虚拟目录的配置问题
查看>>
JSP页面中引入另一个JSP页面
查看>>
Android笔记——活动的生命周期
查看>>
springmvc使用包装的pojo接收商品信息的查询条件
查看>>
【Linux】【Services】【Configuration】puppet
查看>>
poj 1002:487-3279(水题,提高题 / hash)
查看>>
RAC环境上搭建DG
查看>>
OS X Mountain Lion高手进阶
查看>>
精通CSS:高级Web标准解决方案(第2版)(Amazon第一CSS畅销书全新改版)
查看>>