<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>盘点 on 庞玉栋个人博客</title><link>https://pangyd.com/tags/%E7%9B%98%E7%82%B9/</link><description>Recent content in 盘点 on 庞玉栋个人博客</description><generator>Hugo</generator><language>zh-cn</language><lastBuildDate>Wed, 18 Oct 2017 20:05:13 +0800</lastBuildDate><atom:link href="https://pangyd.com/tags/%E7%9B%98%E7%82%B9/index.xml" rel="self" type="application/rss+xml"/><item><title>Java字符串的10大热点问题盘点</title><link>https://pangyd.com/post/139-java10/</link><pubDate>Wed, 18 Oct 2017 20:04:33 +0800</pubDate><guid>https://pangyd.com/post/139-java10/</guid><description>&lt;p style="text-align: center">&lt;img data-s="300,640" data-type="jpeg" data-src="https://pangyd.com/uploads/2017/10/74c10f869f038762.jpg" data-copyright="0" class="" data-ratio="0.6661538461538462" data-w="650" data-backw="556" data-backh="370" width="100%" src="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='480' height='120'%3E%3Crect width='480' height='120' fill='%230E1012' stroke='%231B1E22'/%3E%3Ctext x='240' y='66' fill='%235C6069' font-family='monospace' font-size='13' text-anchor='middle'%3E%5B%E5%8E%9F%E5%9B%BE%E5%B7%B2%E5%A4%B1%E6%95%88%5D%3C/text%3E%3C/svg%3E" data-fail="0">&lt;/p>&lt;p>&lt;span>&lt;/span>&lt;br>&lt;/p>&lt;p>&lt;span>下面我为大家总结了10条Java开发者经常会提的关于Java字符串的问题，如果你也是Java初学者，仔细看看吧：&lt;/span>&lt;/p>&lt;h2>&lt;span>1、如何比较字符串，应该用”==”还是equals()？&lt;/span>&lt;/h2>&lt;p>&lt;span>总的来说，”==”是用来比较字符串的引用地址，而equals()才是比较字符串的值。两个值相同的字符串用”==”比较结果有可能是false，而用equals()则一定为true。除非两个字符串是同一个new出来的对象，不然比较字符串值是否相同应该要用equals()。&lt;/span>&lt;/p>&lt;h2>&lt;span>2、对那些安全敏感的信息，为什么用char[]存储要优于String？&lt;/span>&lt;/h2>&lt;p>&lt;span>String是不可变的，这就意味着它一旦被创建，就将永久驻留在内存中，直到垃圾回收器将其回收为止。然而用数组存储方式，你可以明确地改变数组中的元素，因此用数组方式，安全信息将有可能不存在系统内存的任何地方。&lt;/span>&lt;/p>&lt;h2>&lt;span>3、能否用字符串来声明switch语句？&lt;/span>&lt;/h2>&lt;p>&lt;span>JAVA 7及以后的版本是支持的。在JDK 7中，允许你使用字符串做switch语句的比较条件。jdk 6以前的版本，不能这样使用：&lt;/span>&lt;/p>&lt;pre class="">//&amp;nbsp;java&amp;nbsp;7&amp;nbsp;only!switch&amp;nbsp;(str.toLowerCase())&amp;nbsp;{&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;case&amp;nbsp;"a":&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;value&amp;nbsp;=&amp;nbsp;1;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;break;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;case&amp;nbsp;"b":&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;value&amp;nbsp;=&amp;nbsp;2;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;break;&lt;br>}&lt;/pre>&lt;h2>&lt;span>4、如何将字符串转换成数字int类型？&lt;/span>&lt;/h2>&lt;pre class="">int&amp;nbsp;n&amp;nbsp;=&amp;nbsp;Integer.parseInt("10");&lt;/pre>&lt;p>&lt;span>很简单，但却会经常用到，也很容易被忽略。&lt;/span>&lt;/p>&lt;h2>&lt;span>5、如何用空格字符来分割字符串？&lt;/span>&lt;/h2>&lt;p>&lt;span>我们可以很方便地用正则表达式来分割字符串，”\s”表示空格字符，比如” “, “\t”, “\r”, “\n”&lt;/span>&lt;/p>&lt;pre class="">String[]&amp;nbsp;strArray&amp;nbsp;=&amp;nbsp;aString.split("\\s+");&lt;/pre>&lt;h2>&lt;span>6、substring()方法究竟是什么？&lt;/span>&lt;/h2>&lt;p>&lt;span>在jdk 6中，substring()方法在原来字符串中提供了一个截取字符的窗口，它并没有创建一个新的String实例。如果你想创建新的字符数组，你可以在substring()后加一个空字符，就像这样：&lt;/span>&lt;/p>&lt;pre class="">str.substring(m,&amp;nbsp;n)&amp;nbsp;+&amp;nbsp;""&lt;/pre>&lt;p>&lt;span>这样就会创建一个新的String实例，上面的方法有时候可以让你的程序运行速度更快，因为垃圾回收器可以将没用的大字符串回收走，并保留其子字符串。&lt;/span>&lt;/p>&lt;h2>&lt;span>7、String、StringBuilder和StringBuffer哪个更优？&lt;/span>&lt;/h2>&lt;p>&lt;span>String和StringBuilder：StringBuilder是可变的，也就是说用StringBuilder创建的字符串你可以随时改变它。StringBuilder和StringBuffer：StringBuffer是同步的，它是线程安全（thread-safe）的，但效率要比StringBuilder差得多。&lt;/span>&lt;/p>&lt;h2>&lt;span>8、如何重复输出字符串？&lt;/span>&lt;/h2>&lt;p>&lt;span>在Python中，我们只需要为字符串乘上一个数字就可以重复输出该字符串了。然而在Java中，我们可以用StringUtils的repeat()方法来实现，StringUtils是Apache公共语言库的其中一个类库成员。&lt;/span>&lt;/p>&lt;pre class="">String&amp;nbsp;str&amp;nbsp;=&amp;nbsp;"abcd";String&amp;nbsp;repeated&amp;nbsp;=&amp;nbsp;StringUtils.repeat(str,3);//abcdabcdabcd&lt;/pre>&lt;h2>&lt;span>9、如何将字符串转换成日期类型？&lt;/span>&lt;/h2>&lt;p>&lt;span>你可以按以下方法来做，代码如下：&lt;/span>&lt;/p>&lt;pre class="">String&amp;nbsp;str&amp;nbsp;=&amp;nbsp;"Sep&amp;nbsp;17,&amp;nbsp;2013";Date&amp;nbsp;date&amp;nbsp;=&amp;nbsp;new&amp;nbsp;SimpleDateFormat("MMMM&amp;nbsp;d,&amp;nbsp;yy",&amp;nbsp;Locale.ENGLISH).parse(str);&lt;br>System.out.println(date);//Tue&amp;nbsp;Sep&amp;nbsp;17&amp;nbsp;00:00:00&amp;nbsp;EDT&amp;nbsp;2013&lt;/pre>&lt;h2>&lt;span>10、如何统计指定字符在字符串中出现的频率&lt;/span>&lt;/h2>&lt;p>&lt;span>同样我们利用了Apache公共语言库中的StringUtils，代码如下：&lt;/span>&lt;/p>&lt;pre class="">int&amp;nbsp;n&amp;nbsp;=&amp;nbsp;StringUtils.countMatches("11112222",&amp;nbsp;"1");&lt;br>System.out.println(n);&lt;/pre></description></item></channel></rss>