- 字符串创建对象的方式有两种:一种是直接赋值,一种是用new关键字构造方法
package com.baidu.cn;
public class Test {
public static void main(String[] args) {
int a=12;
Object obj2=new Object();
- 首先,我们先引入==的关系运算符:如果在基本数据类型中,由于变量与值同在栈中,所以比较的是值是否相等;
- 如果在引用类型中,因为变量存的是对象的地址,所以这时==比较地址是否相等;
- 字符串创建对象的两种方式是有一定区别的:
a、直接赋值:对象存入常量池中;当JVM创建字符串对象前会先去常量池中找有没有一个字符串内容与当前字符串相同,有:将已有的地址赋值给变量;无,创建新的对象
b、new :直接存入堆内存;每new一次就会创建一个新的对象
String name="tom";
String name2="tom";
System.out.println(name==name2);
String name3="Tom";
System.out.println(name==name3);
String address=new String("河南郑州市高新区");
String address2=new String("河南郑州市高新区");
System.out.println(name==address);
System.out.println(address2==address);
此时执行上述代码,可以得出代码的执行结果为
我们在形象地描述堆和栈,以及变量池时,可以有如下示意图,帮助我们更好理解
栈是先进后出;堆比栈大,是先进先出,常量池在堆中。
- 引入StringBuffer
为什么要引出stringbuffer的概念
String names="1";
for (int i = 0; i < 50; i++) {
names=names+"om";
}
在上述代码中,每执行一次for循环,则就创建一个新的对象,此时java的内存区为其不断开辟空间,每次循环都新建的对象太占空间还没有效率
什么是stringbuffer及其用法
public static void main(String[] args) {
StringBuffer names = new StringBuffer("T");
for (int i = 0; i < 50; i++) {
names.append("om");
}
此时自始自终都只有一个stringbuffer对象
stringbuffer的其他常见用法
names = new StringBuffer("ABCDEFG");
System.out.println(names.reverse());
上面插入的代码块中代码的作用就是将stringbuffer的对象倒序输出