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年多了,以前只是看别人的文章,给别人的文章点点赞,没有动手写过一篇博客,不过想要养成更好的习惯,不要要有知识的输入,也要有知识的输出,如果我们有一些相同的地方,希望能点个关注,多多支持~~~,
第一篇写的肯定多多少少有不合适,需要改进的地方,还希望有错误的地方大家多多包含,指出,我们共同进步~
一枚努力奋斗的大学生
- 点赞 2
- 收藏
- 分享
- 文章举报
- 2017/12/31Java基础学习——判断两个数组是否相同のArrays.equals(a, b)方法
- java判断String类型是否能转换为int的方法
- 黑马程序员--Java基础学习笔记【数组操作、基本数据类型包装类】
- 【Java学习笔记】基础知识学习1【基本输出,数据类型,基础运算符号】
- JAVA学习笔记_判断二位数组是否存在连续4个数的值相同
- JAVA基础学习之String、StringBuffer、StringBuilder、基本数据类型的使用、整形进制转换、集合Collection、Vector、ArrayList、LinkedList、HashSet、TreeSet等(3)
- Java学习笔记06 String和基本数据类型
- 学习笔记-java基本类型的包装类,常用方法
- JAVA基础学习笔记 day002_基本数据类型间的转换
- Java基础学习笔记(一)基本数据类型
- Java学习笔记-《Java程序员面试宝典》-第四章基础知识-4.4基本类型与运算(4.4.5-4.4.10)
- Java基础学习笔记 -- 4(基本数据类型)
- JAVA基础学习笔记(2):八种基本数据类型
- 黑马程序员—java基础学习--String字符串类,基本数据类型包装类
- Java基础学习笔记(一)基本数据类型
- java学习笔记--基础知识--基本类型和引用类型
- Java学习笔记-《Java程序员面试宝典》-第四章基础知识-4.4基本类型与运算(4.4.1)
- java学习笔记StringBuffer/StringBuilder及基本数据类型
- 【JAVA基础】0012--------判断String类型的XML中是否存在某一个节点
- java基础学习笔记——基本数据类型对象包装类