一.字符串
String的创建方式一般有如下几种:
1.直接用" "创建
String s1="aaa";
String s2="aaa";
System.out.println(s1==s2);//true
2.使用new String()创建
String s1="aaa";
String string=new String();
string="aaa";
System.out.println(s1==string);//true

3.使用new String(" ")创建
String s1="aaa";
String s2=new String("aaa");
s2=s2.intern();//会使s2指向该对象常量池s1中的引用
System.out.println(s1==s2);//true
4.使用重载的字符串连接操作符"+"创建
String s1="aaa";
String s2=new String("777");
String s3="aaa777";
System.out.println(s3==s2+s1);//false
二.StringBuffer
public class Test6 { public static void main(String[] args) { StringBuffer a=new StringBuffer("A"); StringBuffer b=new StringBuffer("B"); operate(a, b); System.out.println(a+" "+b); } public static void operate(StringBuffer x,StringBuffer y) { x.append(y); y=x; } }
讯享网
分析结果:
第一步:oprate 函数传入两个StringBuffer类型的句柄副本,一个是x,一个是y

第二步:执行x.apend(y)

第三步.执行y=x;y指向AB

函数结束,x,y自然消失,a指向的是AB,b指向的是B
注意:1.不要简单的认为StringBuffer.append()效率好于"+"是错误的

2.避免使用"+="来构造字符串
String s="a"+"b";
String s="a";
s+="b";
前者开辟了一个内存段,后者开辟了两个.会造成内存的浪费
题目:以下程序创建了几个对象?
String A,B,C;
A="a";
B="b";
A=A+B;
StringBuffer D=new StringBuffer("abc");
D=D.append("567");
创建了5个对象
//题目:一个字符串中可能包含a~z中的 多个字符,如有重复,如String data="aavzjksdhdksahdkas"
//求出现次数最多的那个字母及次数,如有多个重复则都求出
public class Test1 {
public static void main(String[] args) {
String data="aaacccdddddooffggasdae";
char[] a=data.toCharArray();//第一步:将字符串转为字符数组
ArrayList<String> list=new ArrayList<>();//创建一个list集合
TreeSet<String> set=new TreeSet<>();//创建一个set集合
int num=0;
for (int i = 0; i < a.length; i++) {
list.add(String.valueOf(a[i]));
set.add(String.valueOf(a[i]));
}
Collections.sort(list);
for (int i = 0; i < list.size()-1; i++) {
while (!list.get(i).equals(list.get(i+1))) {
System.out.println(list.get(i)+"的个数"+(i+1-list.indexOf(list.get(i))));
break;
}
}
}
}
讯享网//一个数组中,"支配者"是在数组中出现频率超过一半的整数,写一个函数,在给定的 //的整数数组中找出支配者是多少,如果一个数组中没有支配者则返回-1 public class Test8 { public static void main(String[] args) { int a[]= {2,3,8,9,3,3,2,3,3}; boolean b=false; //遍历数组 for (int i = 0; i < a.length-1; i++) { int count=1;//统计元素个数 for (int j = i+1; j < a.length; j++) { if (a[i]==a[j]) { count++; } } if ((double)count/a.length>0.5) { System.out.println("支配者是"+a[i]); b=true; } } if (b==false) { System.out.println(-1);//没有支配者 } } }
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/22221.html