【Java学习笔记】 String类的内存模型与方法调用

深入理解Java String#intern()内存模型 大家知道,Java中string.intern()方法调用会先去字符串常量池中查找相应的字符串,如果字符串不存在,会在字符串常量池中创建该字符串然后再返回。   字符串常量池是一个固定大小的HashMap,桶的数量默认是1009, 从Java7u40开始,该默认值增大到60013。在Java6当中,字符串常量池是放在Perm空间的,从Java7开始,字符串常量池被移到Heap空间。下面,我们通过测试程序来窥探字符串常量池在Java6,Java7两个不同版本底下的内存分配情况。   测试程序 public class StringPoolTest { public void testSt 立即下载

String类在系统中被final关键字修饰,无法创建子类

一、内存模型

常量:

常量即"“括起的字符序列,例如"csdn”,“java”,在Java的内存模型中,String常量作为一个类被储存在常量池中。常量池中储存该对象的实体与引用。
需要注意的是,只要程序中运行到的部分存在String常量,在常量池中便会生成该对象的实体与引用并返回引用(若该String常量在之前的运行过程中已出现,则直接返回引用)

String s1,s2,s3;
s1="你好”;   
//常量池中生成"你好"类的实体与引用(假设为12AB),返回12AB,12AB这个引用被赋值给s1这个引用
s2="很不好"
////常量池中生成"很不好"类的实体与引用(假设为12AC),返回12AC,12AC这个引用被赋值给s2这个引用
s3="你好"
//常量池中已有"你好类"的实体与引用,直接返回引用,即返回12AB,被赋值给s3这个引用

非常量

String非常量类储存在动态区,String非常量类的声明为String s=new String("asdasdas")
例子分析:

String s1=new String("hei");
//创建引用s1(假设为AABF)并创建“hei”实体
String s2=new String("hei");
//创建引用s2(假设为AAAS)并创建“hei”实体
//需要注意的是,尽管两个“hei”相同,但内存不同,不同于常量内存模型

二、构造方法

String() 以空字符序列初始化新创建的 String对象
String(char[] value) 以字符数组初始化新创建的String对象
String(char[] value, int offset, int count)以字符数组从offset下标开始的后count位字符序列初始化新创建的String对象
String(String original) 用字符串初始化新创建的String对象,使其表示与参数相同的字符序列; 换句话说,新创建的字符串是参数字符串的副本。

三、基本方法

+二元运算符可对两个String对象进行首尾相接
public int length()返回字符串长度
public boolean equals(String s)方法判断该String对象与s是否相同,是则返回true,否则false(注意不能直接判断s1==s2,因为此时进行的是两个引用的比较,而不是实体间的比较)
public boolean startsWith(String s),public boolean endsWith(Strings) 返回字符串s是否是当前String对象的前缀或后缀
public int compareTo(String s) 当前String对象与s按字典顺序进行比较,若小于返回负值,等于返回0,大于返回正值
public boolean contains(String s)返回当前String对象是否包含子序列s
public int IndexOf(String s),public int lastIndexOf(String s)返回首索引与尾索引,若无,返回-1
public String substring(int startpoint)返回从starpoint下标开始的最长子串
public String substring(int start,int end) 返回索引为**[start,end)**的子串
public String trim()返回去掉首尾空格后的字符串

四、类型转换

Integer.parseInt(String s)返回s对应的int型数据
Byte.parseByte(String s)返回s对应的byte型数据
Short.parseShort(String s)返回s对应的short型数据
Long.parseLong(String s)返回s对应的long型数据
Float.parseFloat(String s)返回s对应的float型数据
Double.parseDouble(String s)返回s对应的double型数据
以上方法在遇到无法解析的字符串时抛出NumberFormatException
String.valueOf(int n),String.valueOf(byte n),String.valueOf(long n),String.valueOf(float n),String.valueOf(double n)返回n对应的字符串

public void getchars(int start.int end,char c[],int offset) 方法:将字符串的[start,end)子串从c的offset下标开始一一赋值
public char[] toCharArray()返回字符串对应的字符数组

五、正则表达式在String中的用法

在Java中,正则表达式是一个String对象的字符序列
public boolean matches(String regex)判断当前String对象是否与参数regex指定的正则表达式匹配
public String replaceAll(String regex,String replacement)返回当前String对象字符序列中所有与regex匹配的子序列被replacement替换后得到的新序列
public String[] split(String regex)返回按regex正则表达式匹配到的字符串序列分割后的String数组

[OrCad电路板设计系统].Orcad.Pspice.9.2下载安装 Orcad.Pspice.9.2详细下载安装图文步骤1 安装前准备工作1.1 下载安装包1.2 解压2 安装时步骤2.1 安装文件2.2 破解文件3 安装完成 1 安装前准备工作 1.1 下载安装包 打开百度网盘APP 链接:https://pan.baidu.com/s/1cMFxHUvuh5iEhFVT-lvciQ 提取码:7m65 1.2 解压 解压下载好的安装包 2 安装时步骤 2.1 安装文件 1.点击Setup安装文件,出现警告对话框,告诉你应该关闭所有病毒防火墙,点击确定 2.进入安装界面, 阅读详情

相关推荐

从零打造M328晶体管测试仪:硬件DIY与烧录避坑指南

本文是一份详尽的M328晶体管测试仪DIY指南,涵盖从硬件选型、PCB设计、焊接组装到固件烧录的全过程。重点解析了使用AVR单片机与Arduino IDE环境时,如何正确设置熔丝位以避免“白屏”等常见问题,并提供了使用ISP编程器进行烧录的实操步骤与校准方法,帮助电子爱好者成功打造属于自己的高性价比元件测试工具。

weixin_29243063的博客 476

String的创建剖析(内存模型)

Stirng的创建剖析

qq_36684207的博客 302

PID循迹控制算法

前言  让小车进行循迹最重要的是获取车相对于循迹线的位置,关于循迹模块的原理我已经在之前的一篇博客上讲过,如果大家没看过的话可以点此链接:PID循迹模块原理。 PID循迹原理简介 图1 循迹车寻线行走图示 图2 市场常见循迹传感器  PID循迹的原理我们大致可以用常识性思维去思考下,如图1所示为循迹车寻线行走图示,现在小车要按照中间那条黑线循迹行走,如果车头往左偏则需要控制方向盘让车往右转,车头往又偏则需要让车往左转。但是仅仅只有左转和右转的话,车一到左边就向右转,一到右边就向左转,则车会来回在线左右晃动

Dinvent的博客 7万+

String的定义及常用方法

字符串,如果直接使用字面量String str = “abc”; ,则从常量池中找,如果使用的是new ,则从堆中找(而堆又会从常量池中找),常量池中不存在,则创建,并引用该常量池中的字符串(使用常量池中的内存地址)...

weixin_51851737的博客 5809

pi-star图形界面安装指南

pi-star图形界面安装指南,MMDVM热点安装,树莓派3B+热点

blueisman的专栏 1911

40、基于指令的GPU编程:OpenACC与OpenMP的深入解析

本文深入解析了两种基于指令的GPU编程模型——OpenACC和OpenMP。从编程复杂度、数据处理方式和性能表现等多个方面对两者进行了对比分析,并结合实际应用场景提供了选择建议。通过详细的代码示例和性能测试结果,帮助开发者更好地理解和应用这两种编程模型,以充分发挥GPU的并行计算能力。

q5r6s7的博客 136

java string的内存模型_Java String内存模型

String内存模型 示例:public static void strMemoryCompare() {String s1 = "HelloWorld";String s2 = new String("HelloWorld");String s3 = "Hello";String s4 = "World";String s5 = "Hello" + "World";String s6 = s3 ...

weixin_39975900的博客 259

ESP32-C3模组上跑通HTTPS分次传输文件(1)

ESP32-C3模组上跑通HTTPS分次传输文件(1)

phmatthaus的专栏 760

关于String类型数据的处理方式

在日常中经常就会碰到String类型的对象,自己再总结一下 1.String对象的存储 1.1.编译时可以确定的String数据通过新建对象放入字符串常量池或者引用常量池里已存在的值相等的对象, 此时有两种情况: A:通过“=”运算符将“xxxxx”字符串直接赋值给引用 B:"="号右边发生字符串的直接拼接[a=“c”+“d”,a在常量池] 1.2.编译时不能确定的String数据在运行时在堆中创建String对象存储,此时也有两种情况: A: "new"的字符串 B: "="号右边有String类型的变量

qq_31019347的博客 824

基于LUT表对鱼眼图像进行畸变校正

当然也可以进行图像的畸变校正操作,已知相机的焦距为fx/fy,光心为cx/cy,像素大小为p(单位mm/pixel)对于畸变校正结果图中像素点(u,v),其对应的原图中的像素坐标(u',v')的计算流程描述如下。1)假设无畸变相机成像模型的焦距和光心与原相机相同,计算得到无畸变相机成像模型中归一化平面坐标(X,Y,Z),其中X=(u-cx)/fx,Y=(v-cy)/fy,Z=1。这里x'/y'的单位为像素。

On my way 639

Unity-TextMeshPro如何扩展材质实现字体Face+Outline流光效果

前言 TexeMeshPro 是Unity的一个Text文本插件,实现了比UGUI的Text,更好看的效果,跟高效的性能,所以深受大家的喜欢,但是再好的插件,也不是万能的,比如我们的策划有个新需求,要我们的VIP的名字比普通玩家有更好看的效果,例如:字体流光,外发光颜色扰动,字体贴图等等。那我们就需要去扩展TextMeshPRo的shader功能了。如下图所示 本文,我就带大家一起来扩展一下:如何扩展TextMeshProUGUI TextMesh原始面板 扩展功能后的面板 扩展TextMeshPro

TxNet 9687

string类的理解以及模拟实现

因为如果每次都老老实实的完成拷贝和赋值的话(也就是向VS环境下的string)是需要代价的,我们需要完成从另一个空间将数据拷贝到其他空间,这是一个不小的时间消耗,但是g++向这样设计的话,就不需要进行数据的拷贝,只需要完成string内部指针的赋值即可,更加高效!size与length在底层实现上是一样的,早期的string是不在容器之内的,求字符长度是用的length,多出来一个size主要是为了与后面string加入容器队伍过后名称的统一!//重载运算符[]//这是利用assert的方式来检查越界。

南猿北者博客 924

化工模拟与优化软件:Aspen HYSYS二次开发_(15).工业应用与项目管理

项目背景、目标和主要流程。

kkchenjj的博客 1131

Java中String类的常用方法

总结了String类的常用方法

m0_53067943的博客 1万+

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

【Java学习笔记】String类(重点)

【Java学习笔记】String类(重点)

在csdn分享更多技术知识,相互交流 1783

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

Java中的String类的常用方法列表

Java中的String类是字符串操作类,提供了多种方法对字符串进行操作,以下对String类的常用方法进行总结: String类的常用方法列表 图示: 图示2:截图一 String类简介 String类位于Java的lang包下,在使用时不需要通过import引入,java使用String类创建一个字符串变量,字符串变量属于对象。java把String类声明的final类,对象创建后不可修改...

晨钟暮鼓林中径,晚风花间寺中人 4315

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

【Java】String类的常用方法

介绍String类中的一些常用的方法,熟悉这些方法的使用。

trong_ 的烂笔头 1560

Java中String类的构造方法

String类的构造方法 String代表字符串,字符串是由多个字符组成的一串数据,字符串可以看成字符数组, 1.字符串字面值“abc”也可以看成一个字符串的对象 2.字符串是常量,一旦被创建,就不能改变 3.字符串可以看做是一个长度固定的有序字符序列,每个组成的字符编有索引从0开始 常见的构造方法 public String():空构造 public String(byte[] bytes):把...

wyq1614406553的博客 8528

【Java】Java String类常用方法

本文系统总结了Java中String类的核心特点与常用方法。文章详细介绍了多种创建方式及30+个常用方法,包括字符串截取、大小写转换、查找替换、分割连接等。通过代码示例演示了trim()、contains()、split()等方法的使用,并对比了String与StringBuilder/StringBuffer的差异,建议单线程用StringBuilder,多线程用StringBuffer。全文涵盖String类从基础特性到实际应用。

经天纬地,格物致理 1967

【JAVA】String类的常用方法

Java 中 String 类的常用方法一、String 类的概念二、常用的构造方法三、常用方法2、length()10、trim()11、toUpperCase() 和 toLowerCase()15、indexOf(...) 和 lastIndexOf(...)

hhj25802580的博客 1209

JNI之C++调用Java类 —— java.lang.String

JNI之C++调用Java类 —— java.lang.String    为什么要用C++调用Java类?很难回答,写着文章只是觉得JNI很有意思。于是开始编写一段使用VC++在Windows系统里调用java的String类,在C++里调用String类内的一些方法。    JNI已经被开发了很多年,而在我2年多的Java编程时间里从来没有接触过。直到最近研究JVM实现原理才注意到JN

零的技术专栏 7472

Java——String类中常用方法的总结

Java——String类中常用方法的总结

贝尔摩德苦艾酒 1万+

Java之String类与StringBuffer类

一、String类 1.实例化方式 1)直接赋值法 String str="abc"; String类的设计采用了共享设计模式。在JVM底层实际上会自动维护一个对象池(字符串对象池),如果采用直接赋值法赋值,JVM会先在对象池中查找,如果有,则直接引用;如果没有,则将该实例化对象放到对象池中。 所谓对象池就是一个对象数组。优点:减少内存的开销。 2)构造法 String st...

smell201611010513的博客 1808

Java.lang中的String类和StringBuilder类介绍和常用方法

String在Java中,String属于一种引用类型,表示字符串类型。实际上,在Java中,所有字符串字面量都是作为String类的对象实例化的,即使用双引号""包裹的都是String类的对象。所以使用表示的是创建了一个String类的对象内容为"abc",而s就是对象名,示意图如下:当对象s指向了"hello"时,此时堆中存在一个空间,其内容为"hello",而接下来想在原来的字符串中拼接"world"是做不到的,所以将拼接后的结果存入一个新空间返回给s,示意图如下:因为String。

小何代码咖啡馆 1979

java中StringBuilder类与String类的区别以及常用功能以及方法

java中StringBuilder类与String类的区别以及常用功能以及方法一。StringBuilder介绍;二。String和StringBuilder的区别;三。构造方法;四。成员方法;五。添加功能;六。反转功能;七。String和StringBuilder之间的相互转换;1。String转换为StringBuilder;2。StringBuilder转换成String; 一。Strin...

来日浅谈的博客 2752
上一篇: 【Java学习笔记】final关键字简单总结
下一篇: 【leetcode451】根据字符出现频率排序,哈希表加优先队列解法
RealWeakCoder
博客等级 码龄7年 236粉丝 68原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值