String类

目录

 

一、两种实例化String对象

二 、String 内容的比较

三 、两种实例化方式的区别

四 、字符串的内容不可改变

五 、小结


一、两种实例化String对象

1、直接赋值

public class StringDemo01{
	public static void main(String args[]){
		String name = "直接赋值" ;			//实例化String类对象
		System.out.println("name的值为 " + name) ;
	}
};

2、通过关键字New

public class StringDemo02{
	public static void main(String args[]){
		String name = new String("new关键字") ;			//实例化String类对象
		System.out.println("name的值为" + name) ;
	}
};

两种方法效果一样,程序均正常执行,下文将对此两种方法进行对比

 

二 、String 内容的比较

public class StringDemo04{
	public static void main(String args[]){
		String str1 = "hello" ;					// 直接赋值
		String str2 = new String("hello") ;		// ͨnew关键字赋值
		String str3 = str2 ;					// 传递引用
		System.out.println("str1 == str2 --> " + (str1==str2)) ;	// false
		System.out.println("str1 == str3 --> " + (str1==str3)) ;	// false
		System.out.println("str2 == str3 --> " + (str2==str3)) ;	// true
	}
};

程序运行结果:

从程序运行结果可以发现,String的内容都一样,但比较的结果却是有的相等,有的不等,此时,进行内存分析如下

使用 " == " 比较,判断的是内存地址是否相等,判断的是地址值

如果想要判断其内容是否相等,则就需要使用 String 类中提供的 equals() 方法完成,代码如下:

public class StringDemo05{
	public static void main(String args[]){
		String str1 = "hello" ;					// 直接赋值
		String str2 = new String("hello") ;		// ͨnew关键字赋值
		String str3 = str2 ;					// 传递引用
		System.out.println("str1 equals str2 --> " + (str1.equals(str2))) ;	// true
		System.out.println("str1 equals str3 --> " + (str1.equals(str3))) ;	// true
		System.out.println("str2 equals str3 --> " + (str2.equals(str3))) ;	// true
	}
};

程序运行结果:

小结:String 有两种比较方式

  •   一种是使用 " == " 进行比较,比较的是 地址值
  • 另一种是使用 " equals() " 方法比较,比较的是具体的内容,开发中比较常用

 

三 、两种实例化方式的区别

1、

public class StringDemo06{
	public static void main(String args[]){
		System.out.println("hello".equals("hello")) ;  //true
	}
};

以上代码运行结果:

  

一个字符串可以直接调用 String类中的方法,说明了  一个字符串就是String类的匿名对象

2、

public class StringDemo07{
	public static void main(String args[]){
		String str1 = "hello" ;					//直接赋值
		String str2 = "hello" ;					//直接赋值
		String str3 = "hello" ;					//直接赋值
		System.out.println("str1 == str2 --> " + (str1==str2)) ;	// true
		System.out.println("str1 == str3 --> " + (str1==str3)) ;	// true
		System.out.println("str2 == str3 --> " + (str2==str3)) ;	// true
	}
};

以上代码运行结果为: ,说明 三个对象内存地址一样  ,内存分析如下

使用直接赋值的方式实例化String类 可有效节省内存,当内容重复时,对象将指向已存在的实例空间

3、

public class StringDemo08{
	public static void main(String args[]){
		String str1 = new String("hello") ;	
	}
};

使用 newString() 方式则意味着 即使内容相同,仍会开辟新的内存空间

在开发中,最好使用直接赋值的方式

 

四 、字符串的内容不可改变

在使用String类进行操作时,有一个特性,那就是 字符串内容一旦声明则不可改变

public class StringDemo09{
	public static void main(String args[]){
		String str = "hello" ;		// 声明字符串
		str = str + " world!!!"	;	// 修改字符串
		System.out.println("str = " + str) ;
	}
};

程序运行结果:

从结果来看,内容可以修改,但实际上改变的是堆内存地址的指向

五 、小结

  • String 类要使用 直接赋值 的方式实例化对象,因为使用 new 会开辟新空间,造成内存浪费
  • 一个字符串就是 String 类的匿名对象
  • 字符串的比较有两种方式: == 和 equals()

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值