前端和后端字符串比较的区别
  bu7dwnTvm4K1 2023年11月01日 51 0

1,javaSript

    var str1="123";
    var str2="123";
    console.log(str1==str2);//true
    console.log(str1===str2);//true

这个没什么要说的
js里面引入了严格执行的=== 符号,两个等号和三个等号的区别在于
1,""表示 等同,会在比较之前进行类型转换,将等号两边转换成相同的类型进行比较,就算类型不同,只要值一样,就可以
2,"
="表示相等,不会进行类型转换

    var str3=123;
    console.log(str1==str3);//true
    console.log(str1===str3);//false

进行字符串截取的时候和上面的相同,不会出现Java里面的截取之后不相等的情况

    var str4=str2.slice(0,2);
    console.log(str4=="12");
    console.log(str4==="12")

2,Java

关于字符串常量池可以先看这边文章:Java中的字符串常量池详细介绍
1,""是属于运算符号,等号两边是基本数据类型的时候,仅仅是比较值的异同,当等号两边是字符串等引用类型的时候,就会比较引用类型的地址,只有地址相同的时候才会相等
2,equals是方法,比较的双方只能是引用类型,equals源码是通过
比较内存地址的,一般的类都会重写equals方法,比较两个的值,String里面就是这样

	String str1="1234";
	String str2="1234";
	System.out.println(str1==str2);//true
	System.out.println(str1.equals(str2));//true

使用字面常量的形式创建字符串时候,会先扫描常量池,例子中的str2创建的时候就会扫描,不会重复创建.

	String str3=str2.substring(0,2);//字符串截取
	System.out.println(str3=="12");//false
	System.out.println(str3.equals("12"));//true

字符串截取,看源码的时候 发现其实是使用new String 创建的,创建了对象没有加入常量池,所以内存地址不相同.==比较的结果是false
如果将截取的字符串加入常量池,再次比较.就会为true了

	String str3=str2.substring(0,2).intern();//使用intern(),字符串加入常量池
	System.out.println(str3=="12");//true
	System.out.println(str3.equals("12"));//true
【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
  2Vtxr3XfwhHq   2024年05月17日   53   0   0 Java
  Tnh5bgG19sRf   2024年05月20日   108   0   0 Java
  8s1LUHPryisj   2024年05月17日   46   0   0 Java
  aRSRdgycpgWt   2024年05月17日   47   0   0 Java
bu7dwnTvm4K1