Java基础学习.笔记之基本类型与String类型判断是否相同的方法差异

String 与 基本数据类型————判断值是否相同

需知

在解决这个问题之前,我们首先要知道以下知识:
1、 在Java中,调用方法,传递实参为基本数据类型的变量,或者传递的实参为基本数据类型的封装类时,传递形式为值传递,当传递的实参为引用类型的时候,传递的形式为地址的传递.

(说人话)基本数据类型:就是说int,float等类型的变量,在传递的时候,只是传递的该变量的值,而不是传递地址. 基本数据类型的封装类:最主要的就是String类型,它在传递的时候传递的也是一个值,而不是引用,在这个方面可能就会造成对代码的影响.
2、在不同类型的数据比较是否相同的过程中,如果是基本数据类型,使用 " == " 比较的是值,但如果是String类型,使用"=="比较的就会是地址(强调!强调!强调!)

分析以下段代码.

package practice;

public class StringCompare {
	String practice;
	StringCompare()
	{
		practice="abc";
	}
	void IsEqual(String a)
	{	
		//System.identityHashCode()用于查看对象的地址.
		System.out.println("a的地址:       "+System.identityHashCode(a));	
		System.out.println("practice的地址:"+System.identityHashCode(practice));
		System.out.println();			
		System.out.println("使用compareTo()比较String获得结果:"+practice.compareTo(a));
		//practice.compareTo(a)结果为0表示字符串相同.
		System.out.println("使用'=='比较String获得结果:"+practice==a);
		System.out.println();
	}
	
	public static void main(String[] args)
	{
		StringCompare A=new StringCompare();	//创造一个StringCompare类的变量A.
		A.IsEqual("abc");				//调用A的方法.传入参数"abc".
		String a=new String("abc");		//生成一个String类,命名为a,其值为"abc".
		System.out.println("*******************************");
		A.IsEqual(a);					//调用A的方法,传入参数a.
	}
}

运算结果如下:

a的地址:       1284693
practice的地址:1284693

使用compareTo()比较String获得结果:0
false

*******************************
a的地址:       31168322
practice的地址:1284693

使用compareTo()比较String获得结果:0
false

有了上述的复习(预习),现在我们来分析

1、 使用我们自己定义的构造函数创造了一个StringCompare类型的变量A,变量A调用了其自己的方法IsEqual.但是传入的是一个常量"abc".因为"abc"的字符串在内存池中已经有了,所以传入的常量"abc"就不会再另外开辟一个新空间,而是指向已有的practice素在空间,即我们发现该常量"abc"与A的属性practice的地址是一样的(同一个地址,值也一定一样).所以此时无论是用"==",还是用compareTo(),得到的结果都是相等的.

2、 命名了一个新的String类型变量a,此时用了 a = new String(“abc”); 所以无论之前在内存池中是否已经存在了值为 “abc"的变量,编译器都会重新创建一个变量.让a指向那个地址.在结果中也可以看出来,a和practice的地址是不一样的, 如果此时还用”=="来比较,由于地址不一样,所以就会返回false.此时使用compareTo()函数来进行比较,就可以避免比较错误啦!

总结

String类型的变量,如果作为实际参数传递,且在方法的函数体内用到了形式参数的值的比较,要用compareTo(another String)方法来比较,才可以得到真正的结果.

写在最后

看CSDN已经有1年多了,以前只是看别人的文章,给别人的文章点点赞,没有动手写过一篇博客,不过想要养成更好的习惯,不要要有知识的输入,也要有知识的输出,如果我们有一些相同的地方,希望能点个关注,多多支持~~~,
第一篇写的肯定多多少少有不合适,需要改进的地方,还希望有错误的地方大家多多包含,指出,我们共同进步~

																								一枚努力奋斗的大学生
  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值