猜您喜欢::向量三点共线定理可以直接用吗-三点共线定理可用 艺术类留学国家怎么选-艺术留学国家选 私人出境旅游攻略-私人出境旅游攻略 瑞士留学本科要求材料-瑞士留学本科申请材料 假四六级证书被中石油查嘛(假四六级中石油查) 九江学院很恐怖(九江学院很吓人) 翻译公司都有什么职位-翻译公司有哪些职位 上汽大众品牌历史-上汽大众品牌历史 心无杂念下一句是什么-心无杂念引经 免税项目是什么-免税项目有哪些
Java 字符串数组实战:戳破那层魔法膜 初探:数组里的“字串” 在 Java 世界里,你见过一个个堆成一摞的“字串”吗?没错,`String[]` 就是那种家伙。想象一下,你在把一堆散落的钥匙(Java 的 String 对象)打包,扔进一个铁盒子里。每个钥匙代表一个独立的字符串对象,它们不是串在一起连成一条直线,而是各自独立存有,编号、位置都不一样。当你用 `String[] name = new String[3];` 时,你实际上是在给这堆钥匙手上了编号,比如 `name[0]`、`name[1]`、`name[2]`,它们共同组成了一个容器,叫数组。 你可能会想,这不就是数组吗?没错,但数组和一般/平平的数组在展示字符串时有点不一样。一般/平平数组在遍历的时候,每个元素都是“单独活着的”,而 String 数组在遍历时,每个元素都是“有状态的”,出于它自己就是个对象。 实操一:如何读出字串里的字符? 如何把字串拆开看呢?你能够用 `char[]` 这个工具。当你在循环里用 `char[] name = new String[3];` 初始化数组时,每个元素都是自动把字串拆开了的。
也就是说,`name[0]` 这个位置,实际占用了 `name[0]` 那一段“内存地址”里的字符。 举个例子,假设你有一个字串 `hello`,双引号里包裹起来的时候,它的实际内容是 `'h'`, `'e'`, `'l'`, `'l'`, `'o'` 这些字节。当你用 `String[] arr = {"hello", "world"};` 的时候,你手里拿的是两个对象,不是拼接起来的字符串。
要是你还想获取第一个字串里的第一个字符,你得用 `"hello"[0]`。
这时候,你拿到的就是一个 `char` 类型的值,比如 `h`。 这里有个小误区,大量人当作 `String` 数组里的元素是字符。
实际上不是,数组里存的是 String 对象。
要是你直接对数组元素赋值,比如 `arr[0] = "hello";`,这行代码会把第三个元素的位置替换掉,出于 String 是可变对象。而要是是 `arr[0] = "h";`,这行代码会把第一个元素(原来的是 "hello")替换成新对象,原来的 "hello" 就会消亡。 实操二:如何存字串? 既然 String 数组里存的是对象,那如何存进去呢?最好办的方式就是直接写字符串字面量。
比如 `String[] names = {"Alice", "Bob", "Charlie"};`。你不需求想那么多,Java 编译器会自动帮你把这些字串对象化。 这时候,你能够用 `Arrays.asList()` 创建一个 list,然后把它转成数组。
要么直接用 `new String[]` 来构建。
不过要注意,`new String[]` 生成的数组对象,它的元素类型是 `String`,故此你得确保你传给它的对象也是 `String` 类型,不能是其他类型。 举个例子,要是你直接写 `String[] arr = new String[];` 这行代码,你会拿到一个空数组。出于你没写多少字串,编译器也不知道该填多少个、哪几个。你得先写 `new String[3];` 要么 `new String[]{}` 来告诉编译器后面要放几个元素。 实操三:如何遍历和判断? 如何遍历这些数组里的字串呢?你能够用 `for` 循环要么 `Stream`。
比如 `for (String s : arr)`,这个语法挺简洁,意思是遍历 `arr` 里的每一个元素 `s`。 判断某个字串是不是某个条件,能够用 `if` 语句。
比如 `if (s.equals("hello"))`。
这里 `equals` 是比较两个字符串内容的,不是比较类名。 还有一个坑,大量新手好办把 `String` 数组当成一般/平平字符串用。
比如想获取第一个字符,直接写 `arr[0].charAt(0)`. 这彻底没难题。但要是想获取整个字串,直接写 `arr[0]` 实际上是把第一个对象指代输出,而不是打印内容。
要是你要打印内容,能够先用 `s.toString()` 要么直接用 `s` 本身(出于 String 默认回 String 对象,打印时会自动调用 toString)。 实操四:为啥不能直接混用? 你可能会问,能不能把 String 数组和字符数组混用?比如 `char[] ch = arr[0];` 这样取一个值。理论上能够,但要注意,`arr[0]` 本身是 String 对象,`ch` 是 `char` 数组。当你赋值给 `ch` 时,`ch` 里会存下那个 String 对象的地址,而不是字串里的字符。 举个例子,要是你定义 `String s = "hello"; String[] arr = {s};` 然后 `char[] ch = arr[0];`。
这时候 `ch` 里存的是 "hello" 的地址,不是 'h'。
要是你再用 `ch[0]`,你拿到的是字符串中的第一个字符 'h'。但要是直接写 `String[] arr = {"hello", "world"};`,`arr` 里存的是两个对象,要是你想把两个对象塞进 `String[]` 数组,你得用 `new String[]{"hello", "world"};` 显式创建。 实际上,Java 的字符串数组本质就是一个对象数组。
要是你想它表现得像字符数组一样撇脱,能够用 `char[]` 来存 "hello" 这种字串里的字符,然后再用 `String[]` 存整个的对象。
比如: ```java char[] chars = "hello".toCharArray(); String[] strings = new String[chars.length]; ``` 这时候 `strings[0]` 就是一个整个的字符串对象,`chars` 里存的是那 5 个字符。 最终的总结 总结一下,Java 中的 String 数组就是由多个 String 对象组成的容器,每个对象独立存自己的字串值和坐标信息。它的特性是:内存分配独立、通过 `equals` 比较内容、通过索引访问对象而不是直接访问字符。使用时,注意区分字串字面量和字符串对象,避免赋值混淆。通过合理使用 `toCharArray()` 和 `Arrays.asList()`,你能够灵活地在对象和字符之间切换,让代码既保险又高效。






