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 条评论
登录 后参与评论

相关文章

来自专栏CSDN技术头条

解读Neo4j全新的Python驱动程序

尽管Neo4j社区目前已发布了Java、Python、JavaScript和.NET官方支持的驱动程序,但其发展并未停步。本周,Neo4j发布驱动程序py2ne...

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

Java新手极简指北手册

为什么我先拿“数据结构和算法”说事捏?这玩意是写程序最最基本的东东。不管你使用 Java 还是其它的什么语言,都离不开它。而且这玩意是跨语言的,学好之后不管在哪...

631
来自专栏lgp20151222

Java的常量接口思考,项目中的常量是放在接口里还是放在类里呢?

最近在看一本书 Java与模式,里面提了一句不建议使用常量接口,甚至举了个java源码的反例,

761
来自专栏小灰灰

EventBus源码学习笔记(一)

EventBus 深入学习一 EventBus是一个消息总线,以观察者模式实现,用于简化程序的组件、线程通信,可以轻易切换线程、开辟线程; 传统上,Java...

1985
来自专栏葡萄城控件技术团队

C#开发人员应该知道的13件事情

本文讲述了C#开发人员应该了解到的13件事情,希望对C#开发人员有所帮助。 1. 开发过程 开发过程是错误和缺陷开始的地方。使用工具可以帮助你在发布之后,解决掉...

1789
来自专栏我就是马云飞

设计模式二十四章经之策略模式

1092
来自专栏腾讯Bugly的专栏

如何定位Obj-C野指针随机Crash(三):如何让Crash自报家门

本文主要介绍如何利用OC Runtime的特性,让OC野指针对象主动抛出自己的信息,秒杀某些全系统栈Crash。 ? 陈其锋,腾讯SNG即通产品部音视频技术中心...

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

Kotlin 与 Java 8 的重要新特性以及 Java 9、10 的发展规划Java 9 新特性 极简介绍Java 10/X 的发展规划Kotlin《Kotlin极简教程》正式上架:

Java 8可谓是自Java 5以来最具革命性的版本了,她在语言、编译器、类库、开发工具以及Java虚拟机等方面都带来了不少新特性。我们来一一回顾一下这些特性。

592
来自专栏Java Edge

项目开发中正确的打日志姿势ERROR:WARNINFO:TRACE

使用slf4j 使用门面模式的日志框架,有利于维护和各个类的日志处理方式统一。 实现方式统一使用: Logback框架 打日志的正确方式 什么时候应该打...

502
来自专栏喵了个咪的博客空间

zephir-(12)php函数和异常处理

#zephir-php函数和异常处理# ? ##前言## 先在这里感谢各位zephir开源技术提供者 经过了一个多月的学习,zephir的文档译文和基础讲解也将...

3396

扫码关注云+社区