mirror of
https://github.com/Snailclimb/JavaGuide
synced 2025-07-28 12:22:17 +08:00
Compare commits
5 Commits
6cb6f4f39a
...
ebba51334e
Author | SHA1 | Date | |
---|---|---|---|
|
ebba51334e | ||
|
ac60a4c2bb | ||
|
aef83d2c23 | ||
|
47a9709504 | ||
|
62bc919316 |
@ -490,9 +490,11 @@ String str3 = "world";
|
||||
String str4 = str1 + str2 + str3;
|
||||
```
|
||||
|
||||
对象引用和“+”的字符串拼接方式,实际上是通过 `StringBuilder` 调用 `append()` 方法实现的,拼接完成之后调用 `toString()` 得到一个 `String` 对象 。
|
||||
上面的代码对应的字节码如下:
|
||||
|
||||

|
||||

|
||||
|
||||
可以看出,字符串对象通过“+”的字符串拼接方式,实际上是通过 `StringBuilder` 调用 `append()` 方法实现的,拼接完成之后调用 `toString()` 得到一个 `String` 对象 。
|
||||
|
||||
不过,在循环内使用“+”进行字符串的拼接的话,存在比较明显的缺陷:**编译器不会创建单个 `StringBuilder` 以复用,会导致创建过多的 `StringBuilder` 对象**。
|
||||
|
||||
@ -507,10 +509,23 @@ System.out.println(s);
|
||||
|
||||
`StringBuilder` 对象是在循环内部被创建的,这意味着每循环一次就会创建一个 `StringBuilder` 对象。
|
||||
|
||||

|
||||

|
||||
|
||||
如果直接使用 `StringBuilder` 对象进行字符串拼接的话,就不会存在这个问题了。
|
||||
|
||||
```java
|
||||
String[] arr = {"he", "llo", "world"};
|
||||
StringBuilder s = new StringBuilder();
|
||||
for (String value : arr) {
|
||||
s.append(value);
|
||||
}
|
||||
System.out.println(s);
|
||||
```
|
||||
|
||||

|
||||
|
||||
如果你使用 IDEA 的话,IDEA 自带的代码检查机制也会提示你修改代码。
|
||||
|
||||
#### String#equals() 和 Object#equals() 有何区别?
|
||||
|
||||
`String` 中的 `equals` 方法是被重写过的,比较的是 String 字符串的值是否相等。 `Object` 的 `equals` 方法是比较的对象的内存地址。
|
||||
|
@ -68,7 +68,7 @@ RBAC 即基于角色的权限访问控制(Role-Based Access Control)。这
|
||||
下面是 `Cookie` 的一些应用案例:
|
||||
|
||||
1. 我们在 `Cookie` 中保存已经登录过的用户信息,下次访问网站的时候页面可以自动帮你登录的一些基本信息给填了。除此之外,`Cookie` 还能保存用户首选项,主题和其他设置信息。
|
||||
2. 使用 `Cookie` 保存 `Session` 或者 `Token` ,向后端发送请求的时候带上 `Cookie`,这样后端就能取到 `Session` 或者 `Token` 了。这样就能记录用户当前的状态了,因为 HTTP 协议是无状态的。
|
||||
2. 使用 `Cookie` 保存 `SessionId` 或者 `Token` ,向后端发送请求的时候带上 `Cookie`,这样后端就能取到 `Session` 或者 `Token` 了。这样就能记录用户当前的状态了,因为 HTTP 协议是无状态的。
|
||||
3. `Cookie` 还可以用来记录和分析用户行为。举个简单的例子你在网上购物的时候,因为 HTTP 协议是没有状态的,如果服务器想要获取你在某个页面的停留状态或者看了哪些商品,一种常用的实现方式就是将这些信息存放在 `Cookie`
|
||||
4. ......
|
||||
|
||||
@ -117,7 +117,7 @@ public String readAllCookies(HttpServletRequest request) {
|
||||
}
|
||||
```
|
||||
|
||||
更多关于如何在 Spring Boot 中使用 `Cookie` 的内容可以查看这篇文章:[How to use cookies in Spring Boot](https://attacomsian.com/blog/cookies-spring-boot。) 。
|
||||
更多关于如何在 Spring Boot 中使用 `Cookie` 的内容可以查看这篇文章:[How to use cookies in Spring Boot](https://attacomsian.com/blog/cookies-spring-boot) 。
|
||||
|
||||
## Cookie 和 Session 有什么区别?
|
||||
|
||||
@ -179,7 +179,7 @@ Session-Cookie 方案在单体环境是一个非常好的身份认证方案。
|
||||
|
||||
## 为什么 Cookie 无法防止 CSRF 攻击,而 Token 可以?
|
||||
|
||||
**CSRF(Cross Site Request Forgery)**一般被翻译为 **跨站请求伪造** 。那么什么是 **跨站请求伪造** 呢?说简单用你的身份去发送一些对你不友好的请求。举个简单的例子:
|
||||
**CSRF(Cross Site Request Forgery)** 一般被翻译为 **跨站请求伪造** 。那么什么是 **跨站请求伪造** 呢?说简单用你的身份去发送一些对你不友好的请求。举个简单的例子:
|
||||
|
||||
小壮登录了某网上银行,他来到了网上银行的帖子区,看到一个帖子下面有一个链接写着“科学理财,年盈利率过万”,小壮好奇的点开了这个链接,结果发现自己的账户少了 10000 元。这是这么回事呢?原来黑客在链接中藏了一个请求,这个请求直接利用小壮的身份给银行发送了一个转账请求,也就是通过你的 Cookie 向银行发出请求。
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user