API:String、integer

本文详细介绍了Java中的字符串类String,强调其不可变性以及字符串常量池的概念,指出在多线程环境中,线程安全的StringBuffer和非线程安全的StringBuilder的使用场景。还探讨了自动装箱和拆箱的机制,以及Integer对象的缓存池原理。

字符串

java.lang.String :字符串类,并且该类加final修饰;
底层就是char数组 private final char value [];
所以字符串有很多的特性就是数组的特性

# 1.字符串一旦创建不能更改;

2.为了提升字符串的访问效率,java中提出了字符串常量池,相当于一个缓存区;
引用类型对象应该保存在堆内存,但字符串不同,保存在字符串常量池中;
3.在程序的执行过程中,如果程序要用到某个字符串;虚拟机会先前常量池中搜索,是否存在这个字符串;
如果有就直接指向改字符串,如果没有就新建一个字符串对象,并指向这个字符串常量池的地址;
因为String一旦创建不可更改,所以不要频繁拼接字符串
因为效率比较低,还浪费空间,并且垃圾回收也会有一定问题
java.lang.StringBuffer java.lang.StringBuilder

1:StringBuffer和StringBuilder是什么?

	一个可变的字符串缓冲区

2:原理?
预先在内存中申请一块空间,可以容纳字符序列(字符数组)
如果 预留空间不够,会进行自动扩容
底层都是char[] ,并且默认初始化容量是16个字符

3:String,StringBuffer,StringBuilder最大的区别?

	①String不可变字符序列,而StringBuilder和StringBuffer是可变字符序列
	②StringBuffer是线程安全,在多线程环境下,不会出现问题,所以效率低,一般常用于类中
	③StringBuilder是非线程安全,在多线程环境下可能出现问题,效率高,一般用于方法中

4 :如何选择StringBuilder和StringBuffer

	多线程环境下,是否有可能出现多个线程同时操作同一个数据的可能(增,删,改);

String 不可以任意拼接的字符串
String s2 = “a” + “b”; 这种写法,在编译阶段,就会把+ 去掉;变成ab;
“a” +“b” a和b都是字面量,需要在编译阶段说明临时空间,所以需要通过值确定类型
编译时看到是两个字符串相加,就直接把+省略,保存ab
s1 == s2 是同一个内存地址 所以相等 true

	String s3 = a + b;
	a和b是变量,编译阶段是不确定变量的值的
	在运行的时候,由于是两个字符串变量相加,新建了一个对象,在堆内存用来存它的值;
	自动创建一个StringBuffer对象,然后把两个变量拼接到一起,最终转换为String类型
	而是以    return new String(value, 0, count);   所以 s3是指向堆内存的

包装类 : 封装了基本类型的操作,更方便我们使用

	byte -- java.lang.Byte
	short -- java.lang.Short
					int  -- java.lang.Integer
	long -- java.lang.Long
	float -- java.lang.Float
	double  -- java.lang.Double
					char  -- java.lang.Character
	boolean -- java.lang.Boolean

既然有了基本类型,为什么还要使用包装类呢?
方便;为了理论上的完整(面向对象);

想要创建一个方法,该方法可以接收任何类型?
Object ,因为Object是所有类的祖类.
由于多态的原因,可以接收任何对象.
基本类型并不是Object的子类,怎么接收?
包装类 , 可以把基本类型转换为对应的包装类类型,
而包装类也是个类,也是Object的子类.

java1.5新特性

自动装箱:把 基本数据类型 自动转换为 对应的包装类
自动拆箱:把 包装类 自动转换为 基本数据类型
都是在编译时完成的;

深入理解自动装箱和自动拆箱

1.都是编译时的概念,和运行时无关
2.装箱的时候,会在编译时 自动把赋值 操作 变成 Integer.valueOf(222)
3.String , Integer,Double 等 八种包装类 和String 都覆写了toString(),equals() , hashCode() 方法
4. Integer.valueOf(xxx) : 方法实现
public static Integer valueOf(int i) {
if (i >= IntegerCache.low && i <= IntegerCache.high)
return IntegerCache.cache[i + (-IntegerCache.low)];
return new Integer(i);
}

5.valueOf : 把基本类型转换为Integer类型

理解:一个大箱子,放的下就直接放进来用,有就直接拿走;
			放不下东西了就放个信息,告诉去哪里拿它;

(箱子的大小)
里面初始化了一个整型常量池,值的范围是在 -128~127之间
就是一个Integer[] 数组 有 256个对象,对象中的int值 分别为 -128,-127…126,127 下标 是 0~ 255
(源码)
在 private static class IntegerCache 类中 是 Integer中的一个静态内部类
三个变量
static final int low = -128;
static final int high;
static final Integer cache[];
并且在 static 代码块中 对这个数组进行了初始化操作

	如果 值 在 -128~127之间 就直接去这个缓存数组中找对应的对象即可,不用再重新创建Integer对象
		   return IntegerCache.cache[i + (-IntegerCache.low)];  
				// IntegerCache.low 是 -128   
				// (-IntegerCache.low) : 就是 128  负负得正
				// 加上 我们要添加的数据,就能得到 对应的值所在缓存数组中的下标索引
				// 把该对象返回

	那么这样的话,如果是通过自动装箱或者是通过valueOf方法赋值的两个值都符合该范围,那么 这两个变量保存的内存地址是一致的,则使用 == 也是true
		如  Integer i1 = 123;  Integer i2 = 123;  或者 Integer i3 = Integer.valueOf(123);  他们的内存地址是相等的,找到的是同一个对象

(箱子不够大的时候)
反之 , 就等于new Integer(xxx)
return new Integer(i); 既然是new 那么 堆内存会重新创建新的对象,那么尽管初始化的int值一样,但是内存地址也不同
所以 使用 == 也是false,此时 应该使用equals 来比较是否相等
如 Integer i4 = Integer.valueOf(128); Integer i5 = Integer.valueOf(128); 或者是 Integer i6 = new Integer(1)

搜索仓库 GET https://gitee.com/api/v5/search/repositories Response Class "root": "assignee": 0: "assignees_number": integer 代码审查设置,审查人数 "assigner": "id": integer "login": string "name": string "avatar_url": string "url": string "html_url": string "remark": string 企业备注名 "followers_url": string "following_url": string "gists_url": string "starred_url": string "subscriptions_url": string "organizations_url": string "repos_url": string "events_url": string "received_events_url": string "type": string "member_role": string "blobs_url": string "branches_url": string "can_comment": boolean 是否允许用户对仓库进行评论 "collaborators_url": string "comments_url": string "commits_url": string "contributors_url": string "created_at": string "default_branch": string 默认分支 "description": string 仓库描述 "enterprise": "id": integer namespace id "type": string namespace 类型,企业:Enterprise,组织:Group,用户:null "name": string namespace 名称 "path": string namespace 路径 "html_url": string namespace 地址 "fork": boolean 是否是fork仓库 "forks_count": integer 仓库fork数量 "forks_url": string "full_name": string "gvp": boolean 是否是 GVP 仓库 "has_issues": boolean 是否开启issue功能 "has_page": boolean 是否开启了 Pages "has_wiki": boolean 是否开启Wiki功能 "homepage": string 主页 "hooks_url": string "html_url": string "human_name": string "id": integer "internal": boolean 是否内部开源 "issue_comment": boolean 是否允许用户对“关闭”状态的 Issue 进行评论 "issue_comment_url": string "issue_template_source": string Issue 模版来源 project: 使用仓库 Issue Template 作为模版; enterprise: 使用企业工作项作为模版 "issues_url": string "keys_url": string "labels_url": string "language": string 语言 "license": string 开源许可 "members": 0: string "milestones_url": string "name": string 仓库名称 "namespace": "id": integer namespace id "type": string namespace 类型,企业:Enterprise,组织:Group,用户:null "name": string namespace 名称 "path": string namespace 路径 "html_url": string namespace 地址 "notifications_url": string "open_issues_count": integer 开启的issue数量 "outsourced": boolean 仓库类型(内部/外包) "owner": "id": integer "login": string "name": string "avatar_url": string "url": string "html_url": string "remark": string 企业备注名 "followers_url": string "following_url": string "gists_url": string "starred_url": string "subscriptions_url": string "organizations_url": string "repos_url": string "events_url": string "received_events_url": string "type": string "member_role": string "paas": string "parent": "id": integer "full_name": string "human_name": string "url": string "namespace": "id": integer namespace id "type": string namespace 类型,企业:Enterprise,组织:Group,用户:null "name": string namespace 名称 "path": string namespace 路径 "html_url": string namespace 地址 "path": string 仓库路径 "name": string 仓库名称 "owner": "id": integer "login": string "name": string "avatar_url": string "url": string "html_url": string "remark": string 企业备注名 "followers_url": string "following_url": string "gists_url": string "starred_url": string "subscriptions_url": string "organizations_url": string "repos_url": string "events_url": string "received_events_url": string "type": string "member_role": string "assigner": "id": integer "login": string "name": string "avatar_url": string "url": string "html_url": string "remark": string 企业备注名 "followers_url": string "following_url": string "gists_url": string "starred_url": string "subscriptions_url": string "organizations_url": string "repos_url": string "events_url": string "received_events_url": string "type": string "member_role": string "description": string 仓库描述 "private": boolean 是否私有 "public": boolean 是否公开 "internal": boolean 是否内部开源 "fork": boolean 是否是fork仓库 "html_url": string "ssh_url": string "forks_url": string "keys_url": string "collaborators_url": string "hooks_url": string "branches_url": string "tags_url": string "blobs_url": string "stargazers_url": string "contributors_url": string "commits_url": string "comments_url": string "issue_comment_url": string "issues_url": string "pulls_url": string "milestones_url": string "notifications_url": string "labels_url": string "releases_url": string "recommend": boolean 是否是推荐仓库 "gvp": boolean 是否是 GVP 仓库 "homepage": string 主页 "language": string 语言 "forks_count": integer 仓库fork数量 "stargazers_count": integer 仓库star数量 "watchers_count": integer 仓库watch数量 "default_branch": string 默认分支 "open_issues_count": integer 开启的issue数量 "has_issues": boolean 是否开启issue功能 "has_wiki": boolean 是否开启Wiki功能 "issue_comment": boolean 是否允许用户对“关闭”状态的 Issue 进行评论 "can_comment": boolean 是否允许用户对仓库进行评论 "pull_requests_enabled": boolean 是否接受 Pull Request,协作开发 "has_page": boolean 是否开启了 Pages "license": string 开源许可 "outsourced": boolean 仓库类型(内部/外包) "project_creator": string 仓库创建者的 username "members": 1 item "pushed_at": string 最近一次代码推送时间 "created_at": string "updated_at": string "paas": string "stared": boolean 是否 star "watched": boolean 是否 watch "permission": Object 操作权限 "relation": string 当前用户相对于仓库的角色 "assignees_number": integer 代码审查设置,审查人数 "testers_number": integer 代码审查设置,测试人数 "assignee": 1 item "testers": 1 item "status": string 仓库状态 "programs": 1 item "enterprise": 5 properties "project_labels": 1 item "issue_template_source": string Issue 模版来源 project: 使用仓库 Issue Template 作为模版; enterprise: 使用企业工作项作为模版 "path": string 仓库路径 "permission": Object 操作权限 "private": boolean 是否私有 "programs": 1 item "project_creator": string 仓库创建者的 username "project_labels": 1 item "public": boolean 是否公开 "pull_requests_enabled": boolean 是否接受 Pull Request,协作开发 "pulls_url": string "pushed_at": string 最近一次代码推送时间 "recommend": boolean 是否是推荐仓库 "relation": string 当前用户相对于仓库的角色 "releases_url": string "ssh_url": string "stared": boolean 是否 star "stargazers_count": integer 仓库star数量 "stargazers_url": string "status": string 仓库状态 "tags_url": string "testers": 1 item "testers_number": integer 代码审查设置,测试人数 "updated_at": string "url": string "watched": boolean 是否 watch "watchers_count": integer 仓库watch数量 该API能否获取以下内容:必取核心数据 项目基础信息: # 从API返回的每个repo对象中提取 data = { "name": repo["name"], # 项目名称 "html_url": repo["html_url"], # 项目URL "description": repo["description"], # 项目描述 "language": repo["language"], # 主要编程语言 星级数据: # 核心指标 "stargazers_count": repo["stargazers_count"], # 当前总星数 ???
最新发布
06-13
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值