xialei的个人小站

逆水行舟,不进则退


  • 首页

  • 分类

  • 归档

  • 标签

  • 关于

  • 搜索

深入理解Java中的i++、++i语句

发表于 2017-07-30 |

在几乎所有的命令式编程语言中,必然都会有i++和++i这种语法。在编程启蒙教材《C语言程序设计》一书中,也专门解释了这两条语句的区别。有些语言中i++和++i既可以作为左值又可以作为右值,笔者专门测试了一下,在Java语言中,这两条语句都只能作为右值,而不能作为左值。同时,它们都可以作为独立的一条指令执行。

1
2
3
4
5
6
7
8
int i = 0;
int j1 = i++; // 正确
int j2 = ++i; // 正确
i++; // 正确
++i; // 正确
i++ = 5; // 编译不通过
++i = 5; // 编译不通过

关于i++和++i的区别,稍微有经验的程序员都或多或少都是了解的,为了文章的完整性,本文也通过实例来简单地解释一下。

1
2
3
4
5
6
7
8
9
10
11
12
13
{
int i = 1;
int j1 = i++;
System.out.println("j1=" + j1); // 输出 j1=1
System.out.println("i=" + i); // 输出 i=2
}
{
int i = 1;
int j2 = ++i;
System.out.println("j2=" + j2); // 输出 j2=2
System.out.println("i=" + i); // 输出 i=2
}

上面的例子中可以看到,无论是i++和++i指令,对于i变量本身来说是没有任何区别,指令执行的结果都是i变量的值加1。而对于j1和j2来说,这就是区别所在。

1
2
3
int i = 1;
int j1 = i++; // 先将i的原始值(1)赋值给变量j1(1),然后i变量的值加1
int j1 = ++i; // 先将i变量的值加1,然后将i的当前值(2)赋值给变量j1(2)

上面的内容是编程基础,是程序员必须要掌握的知识点。本文将在此基础上更加深入地研究其实现原理和陷阱,也有一定的深度。在读本文之前,您应该了解:

  1. 多线程相关知识
  2. Java编译相关知识
  3. JMM(Java内存模型)

本文接下来的主要内容包括:

  1. Java中i++和++i的实现原理
  2. 在使用i++和++i时可能会遇到的一些“坑”
阅读全文 »

Https配置

发表于 2017-07-09 | 分类于 http/https |

距离上一次提笔写博客已经过去5个月了!工作固然是比较忙,但更多地其实是自己变成越来越懒惰了。人都是有惰性的,由懒惰到勤奋难,由勤奋到懒惰却是非常简单。笔者时常提醒自己不忘初心,毕业3年就已经差不多忘了自己从何出发、为何出发、终点在哪里!对于自己的定位仍然是一名程序员,目标仍然是成为优秀的架构师!

言归正传,本篇文章主要是介绍如果配置一套基于的Https的web环境,文章以实际操作为重点,并附带罗列一些理论基础,所以并不是从零开始。在阅读本篇文章之前,读者需要具备以下知识:

  1. TLS/SSL协议
  2. tomcat
  3. 数字证书和CA

本文的主要内容包括:

  1. Https概要介绍
  2. 自签名证书
  3. tomcat中配置https
阅读全文 »

2016年年终总结

发表于 2017-01-25 | 分类于 心情 |

今天是2017年1月25日,农历12月28,再过一天就要跟宝宝一起踏上回家的火车,跟家里人过年团圆了!这篇文章本应该在公元2016年年底撰写,但是,由于一些原因导致并没有完成。

  1. 客观上,前一段时间因为项目原因,非常地忙。几乎每天都要加班到很晚,生理和心理上都比较疲惫。平常下完班到家一般都10点多了,洗洗差不多就可以睡觉了。虽然周末基本上不加班了,但是心理上的疲惫让人喘不过气来,已经没有心情花上时间去写这篇文章了。
  2. 主观上,我已经变得越来越懒惰了,除了上面所说的可观原因外,内心对学习、写文章这种事情出现了抗拒心理。对笔者来说,这是一种非常糟糕的状态。以前信誓旦旦地说要不忘初心,现如今却因为走的太快,而忘了自己为什么出发了!

借着闲余之际,在猴年即将过去、鸡年向我们走来的时候,来好好总结一下2016年的成功、失败、收获和失去。

阅读全文 »

温故知新——关系型数据库学习索引

发表于 2016-09-21 | 分类于 索引 |

数据库基础

  • 基本概念
  • 数据表设计
  • SQL语言

MySQL数据库

  • MySQL基础
  • MySQL命令
  • 索引和慢查询
  • 锁
  • Mysql集群

本文由xialei原创,转载请说明出处。

重新认识java——线程(Thread)

发表于 2016-09-17 | 分类于 java |

多线程编程是开发者必须要掌握的基本技能,线程(Thread)是基础和核心。只有深刻地理解Java线程,才能写出合理、高效的多线程代码。本文将研究Java中的线程,同时会捎带部分操作系统相关内容。主要的内容如下:

  1. 进程与线程
  2. Java线程(线程创建、Thread中的主要方法、线程通信)

进程与线程

进程与线程,是操作系统中的重要概念,稍微有点计算机基础的开发者都会听说过、接触过。

进程(Process):计算机中的程序关于某数据集合上的一次运行活动,是操作系统结构的基础(来自百度百科)。狭义上来说,进程是正在运行的程序实例。进程和程序间的关系很微妙,用一个比喻(来自《现代操作系统》)来说明。有一位拥有一手好厨艺计算机科学家正在为女儿烘制蛋糕,他有制作蛋糕的食谱,还有一些原料(面粉、鸡蛋等)。在这个例子中,食谱就是程序(用适当形式描述的算法),科学家就是CPU,原料就是各种输入数据。那么,进程就是食谱、原料以及烘制蛋糕的系列动作的总和。

线程(Thread):有时也被称为轻量级进程,是程序调度和执行的最小单元。线程自己不拥有系统资源,只拥有一点儿在运行中必不可少的资源,但它可与同属一个进程的其它线程共享进程所拥有的全部资源。一个进程可以包含多个线程,而一个线程只能属于唯一的进程。

已经有了进程,为什么还会需要线程呢?主要原因如下:

  1. 许多应用程序中,同时发生着多个活动。将这些应用程序分解成多个准并行的线程,程序设计的模型会变成更加简单。
  2. 由于线程比进程进行更加轻量,创建和取消更加容易。
  3. 如果程序是IO密集型,那么多线程执行能够加快程序的执行速度。(如果是CPU密集型,则没有这个优势)
  4. 在多CPU系统中,多线程是可以真正并行执行的。
阅读全文 »

重新认识Java——容器体系(Collection)

发表于 2016-07-23 | 分类于 java |

Java中的容器在开发过程必然会接触到的,也是作为一名合格的Java程序员必须要掌握的内容。各种面试、笔试中十有八九都会在容器上面做“文章”。由于每一类容器涉及的知识点都比较多,基于单一职责原则,本文并不会对特定容器做特别深入地介绍。文章在宏观层面上来研究一下Java中的容器体系,并比较各种容器之前的联系与区别,主要内容如下:

  1. Java容器的体系结构
  2. Collection体系
  3. Map体系
阅读全文 »

重新认识Java——字符串(String)

发表于 2016-07-10 | 分类于 java |

对于任何变成语言来说,接触字符串都是不可避免,Java也不例外。Java中String类位于java.lang包下,是整个Java语言的基石。同时String类使用final关键词修饰,意味着外部调用者无法通过继承和重写来更改其功能。Java中的字符串与语言相比,也有其特殊性。本文深入地理解Java字符串,主要内容有:

  1. String的初始化
  2. String与常量池
  3. String的不变性
  4. String、StringBuffer与StringBuilder
  5. “+”操作符
阅读全文 »

重新认识Java——泛型(通配、特性和注意点)

发表于 2016-07-03 | 分类于 java |

上一篇文章介绍了Java泛型中的基础及原理,本文将继续研究有关Java泛型的内容。本文的主要内容有:

  1. 泛型的特性
  2. 泛型通配
  3. 泛型类与普通类的不同点,也是日常开发要主要的点
阅读全文 »

重新认识Java——泛型(基础、使用和实现原理)

发表于 2016-06-25 | 分类于 java |

泛型是Java中重要知识点,是必须要深刻掌握的内容。由于泛型相关的内容比较多,基于单一知识原则,笔者打算将泛型部分分开成两部分书写。本文主要的内容如下:

  1. 泛型基础概念
  2. 泛型的分类、定义和使用
  3. Java泛型的实现原理
阅读全文 »

重新认识Java——基本类型和包装类

发表于 2016-06-16 | 分类于 java |

Java一种静态编程语言,所有变量和表达式是在编译时就确定的。同时,Java又是一种强类型语言,所有的变量和表达式都有具体的类型,并且每种类型是严格定义的。类型限制了变量可以hold什么样的值,表达式最终会产生什么样的值,可以进行哪些操作。在Java中共有8中基本类型数据,同时每种基本类型又有对应的包装类。本文将介绍Java中的基本数据类型及其包装类,主要内容如下:

  1. 介绍Java中的基本类型及其大小
  2. 基本类型之间的转换
  3. 包装类
阅读全文 »
123
xialei

xialei

学而不思则罔,思而不学则殆

29 日志
9 分类
17 标签
GitHub CSDN
友情链接
  • Segmentfault
  • 开源中国
  • 码市
© 2015 - 2017 xialei
由 Hexo 强力驱动
主题 - NexT.Mist