博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
String的点点滴滴
阅读量:5819 次
发布时间:2019-06-18

本文共 4105 字,大约阅读时间需要 13 分钟。

一、String 的 equals()到底比较的是什么?equals() 与 == 的区别? 

当使用关系运算符==比较两个对象时,是比较两个对象使用的内存地址和内容是否相同,如果两个对象使用的是同一个内存地址,并且内容相同,则结果为true,否则结果为false

       当使用对象的equals( )方法比较两个对象时,是比较两个对象的内容是否相同。而与对象的内存地址无关,如果两个对象的内容相同,则结果为true,否则结果为false
 
例如:
  String str1 = new String("hello"); 
  String str2 = new String("hello");
  String str3 = str2;
图解:
 
代码:
1 public class CompareObjectDemo { 2      public static void main(String[] args) { 3           String str1 = new String("hello"); 4           String str2 = new String("hello"); 5           String str3 = str2; 6          //用==比较 7          System.out.println("str1 == str2的比较结果为:\n\t" + (str1 == str2)); 8         System.out.println("str2 == str3的比较结果为:\n\t" + (str2 == str3)); 9        //用equals比较10        System.out.println("str1.equals(str2)的比较结果为:\n\t" +str1.equals(str2));11        System.out.println("str2.equals(str3)的比较结果为:\n\t" +str2.equals(str3));12      }13 }

 

结果:
 
注意:在Java中,如果将同一个字符串常量赋值给多个字符串变量来创建字符串对象,则这些字符串对象具有相同的地址,因为同一个字符串常量在内存中的地址是不变的,所以多个对象共用同一个内存地址
 
又如:
 
String str1 = "hello";
String str2 = "hello";
String str3 = str2;
图解:
 
代码:
1 public class CompareObjectDemo { 2      public static void main(String[] args) { 3           String str1 = "hello"; 4           String str2 = "hello"; 5           String str3 =str2; 6   7           //用==比较 8           System.out.println("str1 == str2的比较结果为:\n\t" + (str1 == str2)); 9           System.out.println("str2 == str3的比较结果为:\n\t" + (str2 == str3));10          //用equals比较11          System.out.println("str1.equals(str2)的比较结果为:\n\t" +str1.equals(str2));12          System.out.println("str2.equals(str3)的比较结果为:\n\t" +str2.equals(str3));13      }14 }

 

结果为:
 
 
 
二、String、StringBuffer、StringBuilder 它们的不同之处
(1)效率: String < StringBuffer < StringBuilder .
为什么?有没有想过?
每次改变String 的值, 底层重新创建了一个新的String对象,如:String str = ""; Str +="xpw"; Str +="yuanmeng"; 前面对str 进行了两次叠加,也创建了两个String对象,并不是简单同一个String对象。所以,不断地改变、string的值,会不断地创建对象,这肯定要耗时;另外,创建对象,也需要占用一定的内存吧,而且StringBuffer和StringBuilder 每次改变String值,不会重新创建新的对象,可以采用append(str)改变str值。所以有时在程序调优时,有必要采用Stringbuffer 或者 StringBuilder进行替换。
那么,StringBuffer为什么效率上会比StringBuilder慢?读过源代码的同学,想必知道了吧,StringBuffer它是线性安全的,就是说它的底层相关方法有Synchronize修饰,在并发时,如果多个线程要访问共享变量,不能简单地同时访问,一旦有一个线程锁住当前对象,其它线程就必须等;而StringBuiler是非线性安全的,允许多个线程同时访问,所以在效率上,StringBuilder 》 StringBuffer。
 
(2)StringBuffer:线性安全
 
   StringBuider:非线性安全
注意:在并发时,要使用StringBuffer比较好,非并发,考虑到效率问题,尽量使用StringBuilder
 
三、String 与 其它  基本类型数据的转换
 
1 /** 2      * String -> other  type 3      */ 4     public static void testString2OtherType(){ 5         String s1 = "121"; 6         int parseInt = Integer.parseInt(s1); 7         System.out.println(parseInt); 8          9         String s2 = "12.1";10         double parseDouble = Double.parseDouble(s2);11         System.out.println(parseDouble);12         13         String s3 = "12.1f";14         float parseFloat = Float.parseFloat(s3);15         System.out.println(parseFloat);16         17         String s4 = "false";18         boolean parseBoolean = Boolean.parseBoolean(s4);19         System.out.println(parseBoolean);20         21         //或者使用如下也可22         Integer i = Integer.valueOf(s1);23         System.out.println(i);24         25         Double d = Double.valueOf(s2);26         System.out.println(d);27         28         //...29     }30     31     /**32      *  other  type --> String33      */34     public static void otherType2String(){35         int i = 38;36         String s1 = String.valueOf(i);37         System.out.println(s1);38         39         float f = 38.38f;40         String s2 = String.valueOf(f);41         System.out.println(s2);42         43         //...44     }

 

四、[很好用] 字符串分割 split

1     public static void main(String[] args) { 2         String src = "hello world,I love you"; 3         StringDemo.testStringSplit(src); 4     }     5  6         public static void testStringSplit(String src){ 7          8         String[] strArray = src.split("\\W");//按照单词来划分,具体的正则表达式可以参考Pattern类,里面有详细介绍 9         10         for(String s : strArray){11             System.out.println(s);12         }13     }

结果

helloworldIloveyou

 

转载于:https://www.cnblogs.com/chenmo-xpw/p/3947368.html

你可能感兴趣的文章
iOS \U7ea2 乱码 转换
查看>>
FCN图像分割
查看>>
ios xmpp demo
查看>>
python matplotlib 中文显示参数设置
查看>>
数据库事务隔离级别
查看>>
【ros】Create a ROS package:package dependencies报错
查看>>
kali linux 更新问题
查看>>
HDU1576 A/B【扩展欧几里得算法】
查看>>
廖雪峰javascript教程学习记录
查看>>
WebApi系列~目录
查看>>
Java访问文件夹中文件的递归遍历代码Demo
查看>>
项目笔记:测试类的编写
查看>>
通过容器编排和服务网格来改进Java微服务的可测性
查看>>
re:Invent解读:没想到你是这样的AWS
查看>>
PyTips 0x02 - Python 中的函数式编程
查看>>
阿里云安全肖力:安全基础建设是企业数字化转型的基石 ...
查看>>
使用《Deep Image Prior》来做图像复原
查看>>
Linux基础命令---rmdir
查看>>
iOS sqlite3(数据库)
查看>>
粤出"飞龙",打造新制造广东样本
查看>>