package 练习;
public class string类 {
public static void main(String[] args) {
//简单方法:
String message="Welcome to Java !";
//求长度
int n = message.length();
System.out.println("结果:"+n);
//选择指定位置的字符
for(int i=0;i<n;i++)
{
char c = message.charAt(i);
System.out.println("结果:"+c);
}
//获取字符、字符串位置
n = message.indexOf('o');//单参数
System.out.println("字符位置:"+n);
n = message.indexOf('o',n+1);//双参数
System.out.println("字符位置:"+n);
n = message.indexOf("come");
System.out.println("字符串位置:"+n);
//大写
message = message.toUpperCase();
//小写
message = message.toLowerCase();
System.out.println("小写结果:"+message);
//去除两边空格
message = " 1 2 3 ";
System.out.println("原结果:"+message);
message = message.trim();
System.out.println("新结果:"+message);
//字符串比较方法 equals()
System.out.println("**样例1:**");
String s1 = "123";
String s2 = new String("123");
if(s1==s2)
System.out.println("1");
else
System.out.println("0");
if(s1.equals(s2))
System.out.println("11");
else
System.out.println("00");
System.out.println("**样例2:**");
String s3 = "123";
if(s1==s3)
System.out.println("1");
else
System.out.println("0");
if(s1.equals(s3))
System.out.println("11");
else
System.out.println("00");
/*
通过这两个样例发现,“==”与equlas()之间存在差异,==能够判断是否为同一个对象,
而equals()判断的是两个对象的值是否相等。应当进行区别的一点是,值相等并不代表对象相同。
那么深究,为什么会产生这两种差距呢?
1.首先java中有两种创建String的两种方式:
第一种采用直接“字面值”赋值的方式,即:String s1="123";
第二种方式采用 “new”方式,即:String s2 = new String("123");
在采用第一种“字面值”赋值方法时,系统会首先到Stringpool(字符串常量池)
区域中查找是否存在这样一个字符串,如果不存在,系统会在常量池中创建一个该对象"123",
并将对象引用的地址返回给s1,因此s1也就指向改对象;如果已经存在对象,系统不会再浪费资源,直接将"123"地址传递给s1.
在这种情况下也就是 样例2 的情况,s1与s3都是字面值赋值,s1和s3中存储的都是"123"的地址,是同一个对象,因此会输出"1".
在采用第二种方式“new”方式时,系统会创建两个“字符串对象”,第一个在常量池中创建,第二个在堆中创建。
在本样例中,系统会首先到常量池中查看是否存在"123"。如果找到了,那么系统就不再在常量池中创建了,但是会在堆中创建一个"123",并且
将堆中的"123"的地址返回给s2,注意这里返回的是堆中的字符串的地址。如果在常量池中未找到,首先在常量池中创建"123",再在堆中创建"123",
返回堆中的地址。
在这种情况下也就是 样例2 的情况,s1与s2中存储的地址是不一样的,因此==返回的是"0",而equals对比的是值,值相同,则返回了"11"。
字符串常量池中的的String对象是不可变的。这样保证常量池中的对象能够被多个引用访问,但是不会改变其值。如果有引用重新进行赋值,
新的值会再次存储在常量池中,作为一个新的对象。
String pool 优缺点:保证了某字符串仅仅创建一次没节省空间与时间,但是浪费了JVM遍历常量池的时间,但总时间还是缩短的。
*/
/*
不可变类:
1.定义:创建对象后,其内容不能够被改变。 同时如果创建的是一个类,并不是类是不可变的,而是类中的属性是不可变的,被final修饰。
在进行自定义不可变类时,首先要利用private和final进行修饰,同时需要创建进行初始化的构造函数,创建仅仅能够返回值的函数,
2.不可变类存在的优点:能够被自由地共享、线程具有安全性、便于构造、访问、测试、使用
3.如果以String为例子,
*/
//子串判断 contains()
s1 = "123456789";
s2 = "456";
if(s1.contains(s2))
System.out.println("子串:1");
else
System.out.println("子串:0");
//前缀、后缀
s3 = "789";
s1 = "123456789";
s2 = "123";
if(s1.startsWith(s2))
System.out.println("前缀:1");
else
System.out.println("前缀:0");
if(s1.endsWith(s3))
System.out.println("后缀:1");
else
System.out.println("后缀:0");
//返回子串
s2 = s1.substring(5);
System.out.println("单参数:"+s2);
s2 = s1.substring(5, 8);
System.out.println("双参数:"+s2);
//数值转换
n = Integer.parseInt(s3);
System.out.println("转化Int:"+n);
double d = Double.parseDouble(s2);
System.out.println("转化Double:"+d);
}
}
java笔记——String操作函数
猜你喜欢
转载自blog.csdn.net/qq_41886231/article/details/102534147
今日推荐
周排行