【java】java的基本程序设计结构07-字符串

字符串

1. 创建字符串

最简单的:

String str = "hello";

用构造函数创建字符串:

String str2=new String("hello");

String 创建的字符串存储在公共池中,而 new 创建的字符串对象在堆上:

注意:

String 类是不可改变的,所以你一旦创建了 String 对象,那它的值就无法改变了

值的改变一定是因为指向了新的位置。

为什么不可更改?

        底层限定大小的数组,空间提前声明好的。往后延伸,违法,自动拦截。

 !!   字符串不可修改是 不能在原地址修改

!!    两个非基本类型,判断是否相等,是看他们的指向是否相同

String类型是指针类型。

        字符串如果有 现成的 已经存在的,会指向现成的。

        所以这两个地址相同。

常量池

String s1="aaa";
s1="zzz";

 

垃圾自动回收机制

        在Java中,如果有块区域没有被指向了,就会被自动回收。(不只java,在其他高级语言里也有)

        但是字符串在常量池中,如果空间足够,不指向它,不会被回收。

如果下一个字符串指向它,有现成的直接用。

public class Main{public static void main(String[] aaa){int[] arr1={12,33};arr1=new int[]{1,2,3,4};String s1="aaa";//s1="zzz";String s2="aaa";String s3=new String("aaa");String s4=new String("aaa");System.out.println(s1==s2); //trueSystem.out.println(s1==s3); //falseSystem.out.println(s3==s4); //f}
}

 凡是见到new,一定是触发底层的malloc,自己创建一个新的空间,不用现成的。

 

2. 字符串长度

 String 类的一个访问器方法是 length() 方法,它返回字符串对象包含的字符数。

public class StringDemo {public static void main(String args[]) {String str = "hello";int len = str.length();System.out.println( "字符串长度 : " + len );}
}

3. 连接字符串

string1.concat(string2);
"我的名字是 ".concat("Lojarro");

常用

使用'+'操作符来连接字符串

"Hello," + " Lojarro" + "!"

4. 字符串比较

s1.equals(s2)

equals比较的是值。

字符串比较:equals是最稳妥的方法。

System.out.println(s1.equals(s2)); //trueSystem.out.println(s1.equals(s3)); //trueSystem.out.println(s3.equals(s4)); //true

equals()作用:

每个类都有这个方法(不仅是字符串类)都是集成object类,默认和==一样比较指向是否相同。

  • 字符串中对这个方法进行了重写,仅比较值。
  • 重写equals还需要重写 hashcode(), 因为 hashmap 的使用需要这两个方法配合。

面试题还会问如何打配合,hashmap存放数据原理。


5. 空串和NULL串

String s1=null;String s2="";//{'\0'}

API:java应用程序编程接口。

一提到接口就是API。

String s1="abcdefghijklm";char m1=s1.charAt(4);System.out.println(m1);int m2=s1.codePointAt(4);System.out.println(m2);

charAt(int index) 返回char


使用最最频繁的打算法的

6. StringBuffer 和 StringBuilder类

System.currentTimeMillis()计算毫秒数(从1970年开始)

字符串拼接方法:

StringBuilder str2=new StringBuilder();

String str="";
for(int i=0;i<100;i++){str +="a";
}

快。

面试题

String类型 和 StringBuilder 类型和 stringBuffer 类型区别

① Stringbuilder和StringBuffer速度远远高于String。

② Stringbuilder多线程并发操作不安全和StringBuffer多线程并发操作下安全。

③ StringBuffer里面加了锁,速度稍微慢一点点。

        计算机内存分配以内存页为单位,内存一字节是一个物理单元,每一个物理地址是一字节。CPU要存1万字节要下达1万次地址指令,要走总线,指令不能同时下,得排队过,来回1万次,消耗时间。

        所以操作系统为了读取快一点,把整个内存分成内存页,每个内存页一个地址,下达一次指令要4096个字节(4KB),只需要下达三次地址指令。

为什么设成4KB而不是10KB、8KB?

内存页对外只有一个总地址,只能找到一个变量,其他找不到,如果放多个变量,是无法找到变量。所以一个内存页只能放一个变量。

int a=9;

int b=7;

int c=6;

三个变量理论上消耗12字节,实际消耗12KB。

int[] arr={9,8,6}

数组是可以放在一个内存页里的,因为数据类型相同。

变量无法确定长度。

 

弱类型语言:默认不区分类型

python PHP js 这些弱类型语言底层还是C

{"s","sdsf",235,25.435F,{1,2,3}} 默认是一样的,内存存数据时放到一块,但是转化为C语言时还是需要分类,消耗很多内存页,所以慢。

对内存的消耗太大,所以他很慢。

一个内存页只能放一个变量,意味着多余的空间被浪费了。

  • 内存页越大,读取的次数少,读取的速度快,浪费空间多
  • 内存页越小,读取的次数多,读取的速度慢,浪费空间少

所以折中取了4KB。

申请1KB也是给4KB-->操作系统最小的分配单元就是4KB。

        


        由于字符串的不可变,所以string的拼接的话,1000次修改就得申请1000*4KB=4000KB 内存空间。

由于本地址值的不可变,100000次需要消耗1.2GB的内存空间。

本地可变可以极大地降低内存的损耗。

Stringbuilder可以指定申请多大空间。本地可变

空间越大,缓冲的越多。

先申请足够大的空间,缓冲一段时间;不够了再申请,再缓存。

 

缓冲区--Buffer:足够大的数组。极大降低内存的损耗,提高速度。

跨语言,不分语言。

凡是以后见Buffer的,底层都是足够大的数组,对内存的损耗都很少,速度都很快。

文件流操作、网络流操作 容易用到缓冲区。

stream流 也是数组。

StringBufferStringbuilder 的前身。 


7. 输入输出

import java.util.*;//打算法比赛,先写这一句
public class Main{public static void main(String[] aaa){System.out.println( Arrays.toString(aaa) );}
}

main方法传的是字符串。

import java.util.*;//打算法比赛,先写这一句
public class Main{public static void main(String[] aaa){System.out.println( Arrays.toString(aaa) );Scanner x=new Scanner(System.in);int k1=x.nextInt();int k2=x.nextInt();float k3=x.nextFloat();System.out.println(k1+","+k2+","+k3);}
}

 

注意:

        空格,回车 也属于字符串

 

import java.util.*;//打算法比赛,先写这一句
public class Main{public static void main(String[] aaa){System.out.println( Arrays.toString(aaa) );Scanner x=new Scanner(System.in);int k1=x.nextInt();int k2=x.nextInt();float k3=x.nextFloat();String k4=x.nextLine();k4=x.nextLine();String k5=x.nextLine();String k6=x.nextLine();String k7=x.nextLine();System.out.println(k1+","+k2+","+k3);System.out.println(k4);System.out.println(k5);System.out.println(k6);System.out.println(k7);}
}

会吃一次回车,所以多设一次。

如果前面没有别的输入,就不用多设了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/463468.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数组排序简介-基数排序(Radix Sort)

基本思想 将整数按位数切割成不同的数字&#xff0c;然后从低位开始&#xff0c;依次到高位&#xff0c;逐位进行排序&#xff0c;从而达到排序的目的。 算法步骤 基数排序算法可以采用「最低位优先法&#xff08;Least Significant Digit First&#xff09;」或者「最高位优先…

w~Transformer~合集8

我自己的原文哦~ https://blog.51cto.com/whaosoft/12419881 #Batch Normalization 本文聚焦于Batch Normalization&#xff0c;Layer Normalization两个标准化方法&#xff0c;对其原理和优势等进行了详细的阐述。 这一篇写Transformer里标准化的方法。在Transformer中&am…

Hadoop——HDFS

什么是HDFS HDFS&#xff08;Hadoop Distributed File System&#xff09;是Apache Hadoop的核心组件之一&#xff0c;是一个分布式文件系统&#xff0c;专门设计用于在大规模集群上存储和管理海量数据。它的设计目标是提供高吞吐量的数据访问和容错能力&#xff0c;以支持大数…

废弃物分类分割系统:入门训练营

废弃物分类分割系统源码&#xff06;数据集分享 [yolov8-seg-C2f-DCNV2-Dynamic&#xff06;yolov8-seg-C2f-DWR等50全套改进创新点发刊_一键训练教程_Web前端展示] 1.研究背景与意义 项目参考ILSVRC ImageNet Large Scale Visual Recognition Challenge 项目来源AAAI Glob…

java项目之微服务在线教育系统设计与实现(springcloud)

风定落花生&#xff0c;歌声逐流水&#xff0c;大家好我是风歌&#xff0c;混迹在java圈的辛苦码农。今天要和大家聊的是一款基于springboot的闲一品交易平台。项目源码以及部署相关请联系风歌&#xff0c;文末附上联系信息 。 项目简介&#xff1a; 微服务在线教育系统设计与…

拆换LED灯珠后测量是短路的,为何

今天更换灯珠遇到一个怪事情&#xff0c;拆换一颗好的灯珠上去&#xff0c;万用表测试是短路的。 后面测试电路板上面&#xff0c;中间的散热部分是跟二极管的正极想通的。而且恰恰此时&#xff0c;LED灯珠的散热部分是跟负极想通的。 遂将线路板上面的散热部分跟二极管正极割…

串口屏控制的自动滑轨(未完工)

序言 疫情期间自己制作了一个自动滑轨&#xff0c;基于无线遥控的&#xff0c;但是整体太大了&#xff0c;非常不方便携带&#xff0c;所以重新设计了一个新的&#xff0c;以2020铝型材做导轨的滑轨&#xff0c;目前2020做滑轨已经很成熟了&#xff0c;配件也都非常便宜&#x…

【NOIP提高组】Hankson的趣味题

【NOIP提高组】Hankson的趣味题 &#x1f490;The Begin&#x1f490;点点关注&#xff0c;收藏不迷路&#x1f490; Hanks 博士是BT (Bio-Tech&#xff0c;生物技术) 领域的知名专家&#xff0c;他的儿子名叫Hankson。现在&#xff0c;刚刚放学回家的Hankson 正在思考一个有趣…

Matlab车牌识别课程设计报告(附源代码)

Matlab车牌识别系统 分院&#xff08;系&#xff09; 信息科学与工程 专业 学生姓名 学号 设计题目 车牌识别系统设计 内容及要求&#xff1a; 车牌定位系统的目的在于正确获取整个图像中车牌的区域&#xff0c; 并识别出车牌号。通过设计实现车牌识别系…

【Unity基础】初识UI Toolkit - 运行时UI

Unity中的UI工具包&#xff08;UI Toolkit&#xff09;不但可以用于创建编辑器UI&#xff0c;同样可以来创建运行时UI。 关于Unity中的UI系统以及使用UI工具包创建编辑器UI可以参见&#xff1a; 1. Unity中的UI系统 2. 初识UI Toolkit - 编辑器UI 本文将通过一个简单示例来…

【重生之我要苦学C语言】深入理解指针4

深入理解指针4 字符指针变量 指针指向字符变量 char ch w; char* p &ch;指针指向字符数组 char arr[10] "abcdef"; char* p arr;printf("%s\n", arr); printf("%s\n", p);结果是一样的 也可以写成&#xff1a; char* p "abc…

Freertos学习日志(1)-基础知识

目录 1.什么是Freertos&#xff1f; 2.为什么要学习RTOS&#xff1f; 3.Freertos多任务处理的原理 1.什么是Freertos&#xff1f; RTOS&#xff0c;即&#xff08;Real Time Operating System 实时操作系统&#xff09;&#xff0c;是一种体积小巧、确定性强的计算机操作系统…

勒索软件通过易受攻击的 Cyber​​Panel 实例攻击网络托管服务器

一个威胁行为者&#xff08;或可能多个&#xff09;使用 PSAUX 和其他勒索软件攻击了大约 22,000 个易受攻击的 Cyber​​Panel 实例以及运行该实例的服务器上的加密文件。 PSAUX 赎金记录&#xff08;来源&#xff1a;LeakIX&#xff09; Cyber​​Panel 漏洞 Cyber​​Pane…

基于vue3和elementPlus的el-tree组件,实现树结构穿梭框,支持数据回显和懒加载

一、功能 功能描述 数据双向穿梭&#xff1a;支持从左侧向右侧转移数据&#xff0c;以及从右侧向左侧转移数据。懒加载支持&#xff1a;支持懒加载数据&#xff0c;适用于大数据量的情况。多种展示形式&#xff1a;右侧列表支持以树形结构或列表形式展示。全选与反选&#xf…

Linux入门-基础指令和权限

1.压缩打包 1.1压缩是什么 压缩是通过特定的算法&#xff0c;使文件减小体积&#xff0c;从而达到节省空间的目的。 1.2.为什么要压缩 a.压缩将文件大小减小&#xff0c;在本地可能不太明显&#xff0c;但是在网络传输中&#xff0c;减小了网络传输的成本。 b.将多个文件压…

WPF中如何解决DataGrid的Header没有多余的一行

将最后一行设置DataGridTemplateColumn Width"*" 使其自适应

Qt/C++地图雷达扫描/动态扇形区域/标记线实时移动/轮船货轮动态轨迹/雷达模拟/跟随地图缩放

一、前言说明 地图雷达扫描的需求场景也不少&#xff0c;很多人的做法是直接搞个覆盖层widget&#xff0c;在widget上绘制雷达&#xff0c;优缺点很明显&#xff0c;优点是性能高&#xff0c;毕竟直接在widget上绘制性能明显比js中绘制要高&#xff0c;缺点是要么动态计算经纬…

Java | Leetcode Java题解之第528题按权重随机选择

题目&#xff1a; 题解&#xff1a; class Solution {int[] pre;int total;public Solution(int[] w) {pre new int[w.length];pre[0] w[0];for (int i 1; i < w.length; i) {pre[i] pre[i - 1] w[i];}total Arrays.stream(w).sum();}public int pickIndex() {int x …

uni-app自定义弹窗

1、项目根目录components目录下创建/modal/modal.vue文件 2、modal.vue文件内容 vue2版本&#xff1a; <template><view class"modal-container"><view class"bg" tap"maskClose"></view><view class"box&quo…

Python小游戏20——超级玛丽

首先&#xff0c;你需要确保你的Python环境中安装了pygame库。如果还没有安装&#xff0c;可以使用以下命令进行安装&#xff1a; bash pip install pygame 运行效果展示 代码展示 python import pygame import sys # 初始化pygame pygame.init() # 设置屏幕尺寸 screen_width …