与String相关的系列 String, 是JAVA中常见的一个引用类型,且其具有一定的特殊性. String类型被设置为final型,即不可继承,也就不可修改其中的实现. String可以改变吗 String被设置为final型的,通常情况下是不可以改变的. 但是,从源码中可以得知,其字符串存储的时候使用的是char[],虽然被标识为final型,但是可以通过反射等方式修改其中的值,但是不推荐. 反射 修改字符串实际值的步骤 : 获反射获取到数组对应的字段Field 修改器访问属性为可访问 修…
差异点比较 String使用+直接拼接 这种情况需要分两种情况来讨论: 1. 都是确定的字符串常量之间进行的+号拼接的时候,由于在编译器就可以确定其具体值了,所以编译器在编译期的时候就会把这些常量拼接的字符串解析为一个整的字符串常量.举例如下: String s1="helloworld"; String s2="hello" + "word"; System.out.println( s1==s2 ); 执行结果: true (可以看出s0跟s…
(二)String Sring 被声明为 final ,因此不可被继承. String的不可变性: 看String的定义(java9版本): public final class String implements java.io.Serializable, Comparable<String>, CharSequence { /** value为存储TSring字符的字符数组 */ private final byte[] value; /** 使用Coder标识使用哪种编码 **/ pri…
Java基础-字符串(String)常用方法 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.java的API概念 Java的API(API:Application(应用) Programming(程序) Interface(接口))就是JDK中提供给我们的类,这些类将底层的代码封装了起来 ,我们不需要关心这些类是如何实现的,只需要学习这些类如何使用即可. 在JDK安装目录下有个src.zip文件,这个文件解压缩后里面的内容是所有java类的源文件,可以在其中查看相应类的源…
package StringDemo; import java.util.Arrays; /* * 常用String.StringBufer类的方法 */ public class Demo1 { public static void main(String[] args) { StringDemo(); StringBufferDemo(); } private static void StringBufferDemo() { /* * public StringBuffer append()…
本文主要解决以下几个问题 String源码解析? String和new String的区别? String通过"+"或concat累加时的对象创建机制? StringBuilder和StringBuffer?区别和联系? String源码解析 String类的定义 public final class String implements java.io.Serializable, Comparable<String>, CharSequence { ...... } 通过上…
ref: https://www.zhihu.com/question/20618891 第一个答案. 扩展“ Java 基础 - System.arraycopy() 浅拷贝 深拷贝…
字符串相关类: String, StringBuffer String类为不可变的字符序列 String s1="hello"; String s2="hello"; System.out.println(s1==s2); //true s1=new String("hello"); s2=new String("hello"); System.out.println(s1==s2); //false System.out.p…
1.Java String 类 String类是final类,也即意味着String类不能被继承,并且它的成员方法都默认为final方法.在Java中,被final修饰的类是不允许被继承的,并且该类中的成员方法都默认为final方法.String对象一旦被创建就是固定不变的了,对String对象的任何操作都不会影响到原对象,相关的任何改变操作都会生成新的对象.字符串缓冲区支持可变的字符串.因为 String 对象是不可变的,所以可以共享. 字符串直接赋值的方式创建对象:直接赋值方式创建对象是在方…
一.java.util.Date 1.只用于显示系统时间,其大部分操作由Calendar代替. 格林威治时间(GMT):指的是1970年1月1日0时,不同地区有时间差. 默认输出格式:星期.月.日.时.分.秒.时区.年 2.构造方法: (1)public Date(); //无参构造创建的对象可以获取本机的当前日期与时间. (2)public Date(long date) ; //根据自定义时间创建Date对象.date若为正数,则表示公元后,若为负数,则表示公元前. 3.常用方法: (1)p…
一.IO流 1.定义: IO流指的是Input/Output流,即输入流/输出流. 输入流:将外界信息写入程序,即从外界获取信息,属于读操作. 输出流:将程序数据发送给外界,即向外界传输数据,属于写操作. 流一定要关闭,否则可能会出现一些异常. 2.分类: (1)按照功能划分: 输入流:只能读数据,不能写数据. 输出流:只能写数据,不能读数据. (2)按照处理单元划分: 字节流:读写字节,基类为InputStream/OutputStream. 字符流:读写字符,基类为Reader/Writer…
Java 内存分配策略 静态存储区(方法区):主要存放静态数据.全局 static 数据和常量.这块内存在程序编译时就已经分配好,并且在程序整个运行期间都存在. 栈区 :当方法被执行时,方法体内的局部变量(其中包括基础数据类型.对象的引用)都在栈上创建,并在方法执行结束时这些局部变量所持有的内存将会自动被释放.因为栈内存分配运算内置于处理器的指令集中,效率很高,但是分配的内存容量有限. 堆区 : 又称动态内存分配,通常就是指在程序运行时直接 new 出来的内存,也就是对象的实例.这部分内存在不使…
主函数类MainDemo.java package com.itcast.test20140109; import java.util.ArrayList; import java.util.Collection; import java.util.Comparator; import java.util.Enumeration; import java.util.HashSet; import java.util.Iterator; import java.util.LinkedHashSet…
String构造方法初始化和常量赋值初始化区别 下面的代码是一个String对象的两种不同的初始化方式,关于这两种不同初始化方式的区别,本文通过画内存图来进行解释,首先代码如下: public class Test { public static void main(String[] args) { String s1 = new String("hello"); String s2 = "hello"; System.out.println(s1 == s2);…
static关键字特点: 随着类的加载而加载. 优先于对象存在. 被所有对象共享 可以直接被类名调用. 使用注意: 静态方法只能访问静态成员. 但非静态成员可以访问静态成员. 静态方法中不能使用this,super关键字. 主方法(main)是静态的. 看了上面是不是想睡觉了,单纯的概念是挺烦人的,那下面让我们在实际代码中来加深对他们的认知. 方法的调用可以分为两种: 对象调用: 对象.方法(实参) 类调用: 这个方法所在类的名字.方法(实参)//前提是这个方法必须被static修饰. 没有使用…
先从String的new的方式 说起 这是面试题里面经常出现的 算是老套路之一 就是 比较下列两个的变化 两种实例化的区别 第一种String name1 = "好人";String name2 = "好人";name1和name2指向了同一空间,"haoren"只存储了一次 第二种String name4 = new String("坏人");String name5 = new String("坏人")…
昨日内容回顾 死锁案例 class DeadLock{ public static void main(String[] args){ Pool pool = new Pool(); Producer p1 = new Producer("p1",pool); Consumer c1 = new Consumer("c1",pool); Consumer c2 = new Consumer("c2",pool); p1.setName("…
String类的两种实例化方式 直接赋值: String str = "www.YOOTK.com"; 构造方法: 构造方法:public String(String str),在构造里面依然要接收一个String类对象: String str = new String("www.YOOTK.com"); 字符串的比较 "=="是Java提供的关系运算符,主要的功能是进行数值相等判断的, 如果用在了String对象上表示的是内存地址数值的比较:…
深入剖析Java之String字符串 在程序开发中字符串无处不在,如用户登陆时输入的用户名.密码等使用的就是字符串. 在 Java 中,字符串被作为 String 类型的对象处理. String 类位于 java.lang 包中.默认情况下,该包被自动导入所有的程序. 创建 String 对象有三种方法 String s1="我是字符串1"; String s2=new String();//创建一个空的字符串对象 String s3=new String("我是字符串2&q…
    JDK :OpenJDK-11      OS :CentOS 7.6.1810      IDE :Eclipse 2019‑03 typesetting :Markdown   code package per.jizuiku.base; /** * @author 给最苦 * @date 2019/06/29 * @blog www.cnblogs.com/jizuiku */ class Demo { /** * @param args */ public static void…
笔记总结: /**与时间相关的类:System_Date_SimpleDateFormat_Calendar类 * 1.system 类下的currentTimeMillis() * 输出从1970年至今的时间的毫秒数, 运行两次即可用于统计时间间隔! * 2.Date() 类:java.util.Date : toString()/getTime()--返回long型64位整数 ; * 以及他的子类java.sql.Date * 3.SimpleDateFormat 类:(国际化) * 格式化…
类初始化相关执行顺序 几个概念说明 代码块的含义与作用 static静态代码块: 一般用于初始化类中的静态变量.比如:给静态的数组或者list变量赋初值.使用static静态代码块进行初始化与直接在定义变量的时候初始化效果是一样的. static静态代码块其实完全可以看做是一个没有名字.没有参数.没有返回值的静态方法,这个静态方法会在main方法执行前执行,而且是主动执行的,不需要任何显示调用,除此之外它和普通的静态方法没有任何区别. 构造块(又称构造代码块) 没有static修饰的代码块: 主…
取出指定索引的字符 -- 使用charAt()方法 public class StringDemo { public static void main(String args[]) { String str = "hello"; // 定义字符串对象 char c = str.charAt(0); // 截取第一个字符 System.out.println(c); // 输出字符 } } 程序执行结果: h 字符数组与字符串的转换 public class StringDemo { p…
一.String常用的方法: 1. == 实质比较两个对象的地址数值 String a = "hello"  (hello为匿名对象) String a1 = "hello" String b = new String("hello") String b1 = new String("hello").intern String c = b; a == b ----------> false     false的原因:ne…
String 相关知识点总结 字符串的不可变性 概述 String 被声明为 final,因此它不可继承 在 Java8 中,String 内部使用 char 数组存储数据 public final class String implements java.io.Serializable, Comparable<String>, CharSequence { /** The value is used for character storage. */ private final char v…
Java基础篇: 题记:本系列文章,会尽量模拟面试现场对话情景, 用口语而非书面语 ,采用问答形式来展现.另外每一个问题都附上“延伸”,这部分内容是帮助小伙伴们更深的理解一些底层细节的补充,在面试中可能很少直接涉及,权当是提高自身水平的知识储备吧. 第一部分:java容器相关 1.问:List 和 Set 都有什么区别? 分析:这种问题面试官一般想考察的都是你对这两种数据结构的了解,已经使用时候的选择依据,所以可以从数据结构和一些使用案例入手分别做个介绍 答:List,列表,元素可重复.常用的实…
Java基础回顾过程中,之前对于Java相关基础知识都是从这个人的博客看一些,那边的内容看一下,觉得不够系统化,决定用xmind脑图的形式,将Java基础知识回顾的作为一个系列,当前正在做的会包含: (1)Java数据类型,下图即为数据类型的内容 (2)Java关键字,会将关键字的含义及用法以及资料来源标注清楚,并且会有相关程序代码附录上,关于如何使用:以及Java的多个关键字的组合使用的情况,也会加以说明 (3)Java数据结构:目前打算将Java的数据结构与Python中的进行对比,从功能上…
总结 1-装箱过程是通过调用包装器的valueOf方法实现的,而拆箱过程是通过调用包装器的 xxxValue方法实现的.(xxx代表对应的基本数据类型).例如:在装箱的时候自动调用的是Integer的valueOf(int)方法.而在拆箱的时候自动调用的是Integer的intValue方法. public class Main { public static void main(String[] args) { Integer i = 10; int n = i; } } 一.为什么需要包装类…
总结个人的面试经历以及一些网上的的面试题,以供以后面试与巩固java基础. 1.String.StringBuilder和StringBuffer的区别 String用于存储不可变字符串的类,StringBuilder和StringBuffer是用于存储可变字符串变量的类: 执行速度:String<StringBuffer<StringBuilder: StringBuilder是线程不安全的,StringBuffer是线程安全的. 2.什么是反射 反射机制是在运行状态中,对于任意一个类,都能…
目录 目录 string基础 Java String 类 创建字符串 StringDemo.java 文件代码: String基本用法 创建String对象的常用方法 String中常用的方法,用法如图所示,具体问度娘 三个方法的使用: lenth() substring() charAt() 字符串与byte数组间的相互转换 ==运算符和equals之间的区别: 字符串的不可变性 String的连接 String.String builder和String buffer的区别 String类的…