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

相关文章

来自专栏封碎

Android中Broadcast的Intent大全 博客分类: Android小技巧 Android.netWAPGoogle

952
来自专栏搞前端的李蚊子

Html5模拟通讯录人员排序(sen.js)

// JavaScript Document  var PY_Json_Str = ""; var PY_Str_1 = ""; var PY_Str_...

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

java.base.jmod

/Library/Java/JavaVirtualMachines/jdk-9.jdk/Contents/Home/jmods$ jmod list java....

1112
来自专栏JMCui

MongoDB系列五(地理空间索引与查询).

Volvo Today, Volvo announced i...

2712
来自专栏码匠的流水账

聊聊HystrixThreadPool

hystrix-core-1.5.12-sources.jar!/com/netflix/hystrix/HystrixThreadPool.java

771
来自专栏项勇

[Android笔记7]之通过DatePickerDialog,TimePickerDialog调用系统时间设置

2753
来自专栏前端儿

Web 前端颜色值--字体--使用,整理整理

颜色值 CSS 颜色使用组合了红绿蓝颜色值 (RGB) 的十六进制 (hex) 表示法进行定义。对光源进行设置的最低值可以是 0(十六进制 00)。最高值是 2...

2232
来自专栏Hadoop数据仓库

Oracle sqlldr 如何导入一个日期列

1. LOAD DATA INFILE * INTO TABLE test FIELDS TERMINATED BY X'9' TRAILING NULLCO...

1786
来自专栏linux驱动个人学习

高通Audio中ASOC的machine驱动

ASoC被分为Machine、Platform和Codec三大部分,其中的Machine驱动负责Platform和Codec之间的耦合以及部分和设备或板子特定的...

9694
来自专栏Pulsar-V

Save Camera Document

#pragma once #include "HCCamera.h" #include <time.h> #include <cstdio> #incl...

2818

扫码关注云+社区