一、堆内存和栈内存
堆内存用于存放由new创建的对象和数组。
在函数中定义的一些基本类型的变量和对象的引用变量都是在函数的栈内存中分配。
当在一段代码块中定义一个变量时,java就在栈中为这个变量分配内存空间,当超过变量的作用域后,java会自动释放掉为该变量分配的内存空间,该内存空间可以立刻被另作他用。
各自优缺点
栈的优点:
1、栈的存取速度快,差不多仅次于位于cpu内的寄存器;
2、数据可共享。
缺点:
1、存在栈中的数据大小与生存期必须是确定的,所以缺乏灵活性。
堆的优点:
1、可动态分配内存大小,生存期也不必事先告诉编译器;
2、java的垃圾回收会自动的回收不再使用的数据。
缺点:
1、由于在运行时动态分配内存,会导致存取速度变慢。
二、 字符串比较
“==”和equals()的区别?
==:比较的是两个字符串内存地址(堆内存)是否相等;
equals():比较的是两个字符串的内容是否相等。
三、常用的方法
1.字符串连接
使用“+”连接字符串
int sqlScore = 80; //sql成绩
int javaScore = 90; //java成绩
double htmlScore = 86.7; //html成绩
String scoreSheet = "SQL:" + sqlScore + " Java:" + javaScore + " HTML:" +htmlScore;
使用String类的concat()方法,语法:A.concat(B),B字符串将被连接到A字符串后面。
String s = new String("你好,");
String name = new String("张三!");
String sentence = s.concat(name);
System.out.println(sentence);
输出结果为
你好,张三!
2.字符串查找
方法 | 说明 |
---|---|
public int indexOf(int ch) | 搜索第一个出现的字符ch |
public int lastindexOf(int ch) | 搜索最后一个出现的字符ch |
四、常见字符串应用
1、字符串比较compareTo、compareToIgnoreCase
2、字符串查找indexOf、lastIndexOf
3、删除字符串
4、字符串替代replace、replaceAll
5、字符串反转reverse
6、字符串转变大小写toUpperCase、toLowerCase
7、去掉首位空格trim
8、是否包含某字符/字符串contains
9、返回指定位置字符charAt
如何用?
public static void main(String args[]){
String str1 = "Hello World";
String str2 = "Hello World";
String str3 = "hello world";
String str4 = " hello world ";
//字符串比较字符串比较compareTo(返回的是int),0相等,复数小于,正数大于
System.out.println("r1 : " + str1.compareTo(str2));
//字符串比较字符串比较compareTo(返回的是int),0相等,复数小于,正数大于
System.out.println("r2 : " + str1.compareTo(str3));
//字符串比较compareToIgnoreCase,忽略大小写。0相等,复数小于,正数大于
System.out.println("r3 : " + str1.compareToIgnoreCase(str3));
//字符串查找indexOf,返回的是找到的第一个的位置,没找到返回-1。从0开始
System.out.println("r4 : " + str1.indexOf("o"));
//查找字符串最后一次出现的位置lastIndexOf
System.out.println("r5 : " + str1.lastIndexOf("o"));
//删除字符串中的一个字符,字符串从0开始的 substring(a, b)返回指定起始位置(含)到结束位置(不含)之间的字符串
System.out.println("r6 : " + str1.substring(0, 5) + str1.substring(6));
//字符串替换,替换所有
System.out.println("r7 : " + str1.replace("o", "h"));
//字符串替换,替换所有
System.out.println("r8 : " + str1.replaceAll("o", "h"));
//字符串替换,替换第一个
System.out.println("r9 : " + str1.replaceFirst("o", "h"));
//字符串反转
System.out.println("r10 : " + new StringBuffer(str1).reverse());
//字符串分割
String [] temp = str1.split("\\ ");
for (String str : temp){
System.out.println("r11 : " + str);
}
//字符串转大写
System.out.println("r12 : " + str1.toUpperCase());
//字符串转小写
System.out.println("r13 : " + str1.toLowerCase());
//去掉首尾空格
System.out.println("r14 : " + str4.trim());
//是否包含,大小写区分
System.out.println("r15 : " + str1.contains("World"));
//返回指定位置字符
System.out.println("r16 : " + str1.charAt(4));
}
运行如下所示
r1:0
r2:-32
r3:0
r4:4
r5:7
r6:HelloWorld
r7:Hellh Whrld
r8:Hellh Whrld
r9:Hellh Whrld
r10:dlroW olleH
r11:Hello
r12:World
r13:HELLO WORLD
r14:hello world
r15:true
r16:o