java1234开源博客系统
博客信息

Java面向对象-String类(上)

0
发布时间:『 2016-09-24 09:52』  博客类别:Java核心基础  阅读(7296) 评论(2)

1,实例化String对象

有两种方式,我们直接看代码:

package com.java1234.chap03.sec08;

public class Demo1 {

	public static void main(String[] args) {
		// 实例化String的方式一
		String name1="张三";
		System.out.println("name1="+name1);
		
		// 实例化String的方式二
		String name2=new String("李四");
		System.out.println("name2="+name2);
	}
}


运行输出:

name1=张三

name2=李四


2,“==”VS“equals方法”

“==” 比较的是引用(是否指向同一个内存块)  “equals”比较的是具体内容

我们上下代码:

package com.java1234.chap03.sec08;

public class Demo2 {

	public static void main(String[] args) {
		String name1="张三";  // 直接赋值方式
		String name2=new String("张三"); // new方式
		String name3=name2; // 传递引用
		
		// ==比较的是引用
		System.out.println("name1==name2:"+(name1==name2));
		System.out.println("name1==name3:"+(name1==name3));
		System.out.println("name2==name3:"+(name2==name3));
		
		// equals比较的是具体内容
		System.out.println("name1.equals(name2):"+(name1.equals(name2)));
		System.out.println("name1.equals(name3:"+(name1.equals(name3)));
		System.out.println("name2.equals(name3):"+(name2.equals(name3)));
	}
}

运行输出:

name1==name2:false

name1==name3:false

name2==name3:true

name1.equals(name2):true

name1.equals(name3:true

name2.equals(name3):true


我们给下内存示意图:

1.jpg


3,String两种实例化方式的区别

直接赋值方式,创建的对象存放到字符串对象池里,假如存在的,就不会再创建;

new对象方式,每次都创建一个新的对象;

我们上一个示例:

package com.java1234.chap03.sec08;

public class Demo3 {

	public static void main(String[] args) {
		String name1="张三";
		String name2="张三";
		String name3=new String("张三");
		String name4=new String("张三");
		
		System.out.println("name1==name2:"+(name1==name2));
		System.out.println("name1==name3:"+(name1==name3));
		System.out.println("name3==name4:"+(name3==name4));
	}
	
}

运行输出:

name1==name2:true

name1==name3:false

name3==name4:false

我们给下内存示意图:

2.jpg


4,字符串的内容不可变性

字符串的特性:不能改变字符串的内容;

要想改变,只能通过指向一个新的内存地址;

我们给下代码:

package com.java1234.chap03.sec08;

public class Demo4 {

	public static void main(String[] args) {
		String name="张";
		name+="三";
		System.out.println(name);
	}
}

这里我们修改了name,本质的话name指向了一个新的内存区域,我们给下内存示意图:

QQ鎴浘20160924095402.png


关键字:   java     String类  
关注Java1234微信公众号
博主信息
Java1234_小锋
(知识改变命运,技术改变世界)
Powered by Java1234 V3.0 Copyright © 2012-2016 Java知识分享网 版权所有