java String 字符串(比较,方法,内存)

java String 字符串

String类在java.lang包下,所以使用的时候不需要导包
*String类代表字符串,java程序中的所有字符串都是此类的实例,*也就是说,java程序中所有的双引号字符串,都是String类的对象。

String对象的创建

一:
String str= new String(“java”);
二:
String str = new String(new char[] {‘1’,‘2’});
三:
String str = “java”;

String 对象在哪个内存区创建对象?

1在常量池中:

像这样使用常量对对象进行赋值的会在常量区创建String对象(上面创建String对象的第三种方法)
如果对对象进行重新赋值会重新创建一个String对象 之前的对象会在方法结束后被销毁。
(字符串常量池从jdk7以后就从方法区挪到了堆内存中)

String str = "a";
str = "b";  //这里是重新创建了String对象的

如果是这样创建String对象的,相同内容的String对象在内存中只会存在一个。

String str = "java";
String str2 = "java";
System.out.println(str == str2);//输出为true(==号比较的是内存地址)

2在堆内存中:

使用new关键字创建的String对象会在堆中创建实例对象(上面创建String对象的一和二)
这个就和普通的创建对象一样

String str = new String("java");
String str2 = new String("java");
System.out.println(str==str2); //false
char[] ch = new char[] {'1','2'};
String str3 = new String(ch);
String str4 = new String(ch);
System.out.println(str3==str4);//false

字符串的对比:

== 号作比较

基本数据类型:比较的是具体的值;
引用数据类型:比较的是地址的值;

String str1="java";
String ste2 = "java";
System.out.println(str1==str2);//fales  (在常量池中创建对象  资源是共享的只创建了一个)
/*----------------------*/
char[] ch = new char[] {'1','2'}
String s1 = new String(ch);
String s2 = new String(ch);
System.out.println(s1 == s2);//false    (普通的对象比较  虽然内容相同,但是是创建了不同的对象)
/*----------------------*/
char[] ch = new char[] {'1','2'}
String s1 = new String(ch);
String s2 = new String("12");
System.out.println(s1 == s2);//false    (一个在常量池中一个在堆内存中比较自然不同)
/*----------------------*/
String str1 = "abc";
String str2 = "ab";
String str3 = str2+"c";
String str4 = "a" + "b" + "c";
System.out.println(str1 == str3);//false    (当字符串之间使用+号拼接的时
候,系统会在底层使用StringBuilder对象调用append方法完成拼接,拼接完成后再调用toString方法转化为String类型)
System.out.println(str1 == str4);//true      (java存在常量优化机制,在编译时会将 "a"+"b"+"c"拼接为"abc")
内容比较:

equals(),(严格区分大小写) equalslgnoreCase() (不区分大小写)

public boolean equals(Object anObject) 是用来比较字符串内容的String对象的一个方法。

String str1 = "abc";
String str2 = "ab";
String str3 = str2+"c";
System.out.println(str1.equals(str3));  //true
/*-----------------------------*/
String str1="java";
String ste2 = "java";
System.out.println(str1.equals(str2));  //true
/*-----------------------------*/
char[] ch = new char[] {'1','2'}
String s1 = new String(ch);
String s2 = new String(ch);
System.out.println(s1.equals(s2));  //true

获取长度

length属性针对数组;
length()方法针对字符串;
size()针对泛型集合

String中的方法:

根据下标获得字符串里面的单个字符:

char ch = str.charAt(int index);

将当前字符串拆分为数组并返回:

char[] arr = str.toCharArray();(默认重写了toString())

字符串截取:

String newStr = str.subString(startIndex,endIndex) [startIndex,endIndex) 左闭右开

String newStr = str.subString(index) [index,str.length()) 获取当前索引到最后的字符串。

字符串替换:

String string = str.replace(oldString,newString); 将字符串中的oldString替换成newString 返回该段被替换过的字符串。

字符串分割:

String[] split = str.split(regex); 根据regex分割str字符串并将分割后的数据通过数组的形式返回。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值