Java漫谈8

今天我们来聊聊字符串。

字符串,在Java中一个最接近与8大数据类型的存在。甚至于由于它太好用了,以至于在编写代码的时候都快忘了有个叫char的基本数据类型了。我记得,当年刚能独立写一些小型代码的时候,被老师问到8大基本的数据类型有哪些,便脱口而出了String,int, boolean……(当然这个回到是错误的)

为什么会出现这种情况呢,因为String有一个非常特殊的功能——可以不用new直接新建。这种能力与基本数据类型的能力比较相像,之前几篇我提过int的使用,简单来说就是int i=3;。再看看String的方式String s="abc";,它们都没有通过new就直接赋值了。

说道String的这个功能,就让我想起了另外一个测试题(如果是初学者,可以选择性跳过)——在Java中,为什么测量一个字符串长度的时候用的.length(),而测量一个数组的长度直接用 .length 就可以了。也就是前者为什么会多一个括号,而后者没有。我不知道你心中有没有什么答案,反正我当年脱口而出的回答就是,这是API规定的,至于API为什么这么规定,这可能是编写API的那个人的习惯吧。

看到这儿你肯定已经知道这并不是习惯使然,而是一种必然。而真正的原因是,数组的就像一个有了规定大小的座位的教室一样,自然的,我们会对了解教室里面的座位总个数,座位号有需求。因此,对数组来说,长度就是它内在的一个属性。相较于数组,字符串更倾向于显示内容,而且纵观Java的API,String类是没有属性的,像得到它的hashcod,length这些结果都是用方法去得到的。而在Java中,调用方法时就会有有括号出现,于是就出现了字符串得到长度的大小时用.length(),而数组的长度是用length

今天我们初步认识了一下String,聊到了String的性质——它是个类,也聊到了它没有属性只有方法这个特性。希望这对你初识String有帮助。

清单

  1. String不是基本的数据类型,它是一个类。
  2. 由于开发的时候对字符串的需求远胜于单个字符,故Java在设计String的时候,让它有了不用new,就能直接赋值的方式。
  3. String a="zzz";String a = new String("zzz"); 效果上看起来一样,但内部的存储方式不同。这一点面试中经常被问到。具体的我们下一次聊。
  4. String的API中常用的有,equals("a"), charAt("a"), subString(a,b), indexOf(1),它们分别是比较字符内容,字符定位,字符串截取,按位置取字符。

原文发布于微信公众号 - 怀英的自我修炼(hydzwxl)

原文发表时间:2017-10-28

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏happyJared

17幅思维导图告诉你 - Python核心知识体系

1984
来自专栏Phoenix的Android之旅

重构 - 完全不用 if-else 可能吗?

上次那篇重构-为什么 if-else 不是好代码 说到代码中的 if-else会随着代码量的增加,在迭代的过程中变的越来越难以维护, 然后用工厂模式的思路可以把...

902
来自专栏编程

Java8新特性第3章

Stream作为Java8的新特性之一,他与Java IO包中的InputStream和OutputStream完全不是一个概念。Java8中的Stream是对...

2147
来自专栏一个会写诗的程序员的博客

《Kotin 极简教程》第7章 面向对象编程(OOP)(1)第7章 面向对象编程(OOP)《Kotlin极简教程》正式上架:

在前面的章节中,我们学习了Kotlin的语言基础知识、类型系统、集合类以及泛型相关的知识。在本章节以及下一章中,我们将一起来学习Kotlin对面向对象编程以及函...

982
来自专栏web前端教室

js数据结构与算法--散列

不扯淡了,还是来学技术吧。 散列,是一种常用的数据存储技术,优势在于可以快速的插入或取出,使用它的数据结构,叫散列表。 它的优势哈,插入、删除、取用数据都很快,...

21910
来自专栏大史住在大前端

javascript基础修炼(2)——What's this(上)

this是javascript关键字之一,是javascript能够实现面向对象编程的核心概念。用得好能让代码优雅高端,风骚飘逸,用不好也绝对是坑人坑己利器。我...

921
来自专栏AzMark

Python列表与元组

1573
来自专栏owent

C++ 新特性学习(三) — Regex库

这个,显然是正则表达式库,作为一个强大而又NB的库,我表示对其理解甚少,只能先研究下基本用法,更具体的用法要等实际应用中用到的时候在细看了。 PS:正则表达式...

651
来自专栏Java帮帮-微信公众号-技术文章全总结

Java面试系列1

Java面试系列1 1 静态变量和实例变量的区别? 静态变量也称作类变量,由static修饰,如:static int s; s就是静态变量,它只能通过类来访...

2815
来自专栏Java呓语

工厂方法模式(延迟到子类来选择实现)

1、工厂方法模式理念介绍 2、它与简单方法模式的区别 3、推荐使用工厂方法的场景 4、在Android 源码中的应用

824

扫码关注云+社区

领取腾讯云代金券