非 BMP 字符判断及判断字符串中是否包含非 BMP 字符

判断一个字符是 BMP 字符还是非 BMP 字符(增补字符),以及判断字符串中是否包含非 BMP 字符。

在 Java 中,要判断一个字符是否为增补字符,也即所谓的非 BMP 字符,可以综合使用 String 类中的 codePointAt 和 Character 类中的 isSupplementaryCodePoint 方法,具体如下:
继续阅读“非 BMP 字符判断及判断字符串中是否包含非 BMP 字符”

Java 语言中一个字符占几个字节?

一个字符占几个字节?很多人喜欢问这个问题,遗憾的是他们没有意识到这其实是一个糟糕的问题,因为它缺乏了必要的前提……

这是一个来自知乎上的问题,https://www.zhihu.com/question/27562173,提问者问:

Java中理论说是一个字符(汉字 字母)占用两个字节。
但是在UTF-8的时候 new String(“字”).getBytes().length 返回的是3 表示3个字节

小白求回答。。

继续阅读“Java 语言中一个字符占几个字节?”

Java 大法好,GC 保平安——关于性能权衡(tradeoff)的一些思考

Java 之父 James Gosling 在一次接受采访谈到 C 语言时说:C 语言的一个大问题之一是“一切都会尖叫着停止”,”Everything comes to a screeching halt” is one of the big issues in C, because of the way that they do pointers……

语言的鄙视链是一直存在的,有人会以自己使用的语言更灵活,更底层,效率更高而自豪乃至鄙视其它一些语言的使用者,比如 C 语言的使用者可能看不上 Java 语言的使用者。Java 之父有一次谈到了 Java 与 C 语言的对比,他是怎么说的呢? 继续阅读“Java 大法好,GC 保平安——关于性能权衡(tradeoff)的一些思考”

Java 线程状态之 BLOCKED

摘要:深入探讨了 Java 线程的 BLOCKED 状态,特别是对 enter 及 reenter 两种情形进行了深入分析。

上一篇章中,我们强调了 BLOCKED 状态跟 I/O 的阻塞是不同的,它不是一般意义上的阻塞,而是特指被 synchronized 块阻塞,即是跟线程同步有关的一个状态。

继续阅读“Java 线程状态之 BLOCKED”

Java 线程状态之 RUNNABLE

摘要:深入探讨了 Java 线程的 RUNNABLE 状态,特别是对处在 IO 阻塞时的状态进行了深入分析。

上一篇我们粗略谈到了 Java 的 6 种线程状态,并对其中较为简单的 NEW 和 TERMINATED 做了分析,现在我们具体来看下 State.RUNNABLE 状态,即所谓的可运行状态。(以下简称 runnable)

继续阅读“Java 线程状态之 RUNNABLE”