Java基础知识

  • 基本类型与运算
    • 1. Java提供了哪些基本数据类型
    • 2. 什么是不可变类
    • 3. 值传递与引用传递的区别
    • 4. Math类中的round、ceil和floor方法的功能各是什么
    • 5. ++i与i++有什么区别
    • 6. 如何实现无符号数的右移操作
    • 7. char型变量中是否可以存储一个中文汉字

上一篇:Java基础知识(三) 关键字

基本类型与运算

1. Java提供了哪些基本数据类型

Java 语言一共提供了 8 种原始的数据类型(byte,short, int,long,float, double,char,boolean),这些数据类型不是对象,而是 Java 语言中不同于类的特殊类型,这些基本类型的数据变量在声明之后就会立刻在栈上被分配内存空间。除了这8 种基本的数据类型外,其他类型都是引用类型(例如类、接口、数组等),引用类型类似于C++中的引用或指针的概念,以特殊的方式指向对象实体,这类变量在声明时不会被分配内存空间,它只是存储了一个内存地址而已。

不同数据类型的对比

数据类型 字节长度 范围 默认值 包装类
int 4 (-2^31 ~ 2^31-1) 0 Integer
short 2 [-32768,32767] 0 Short
long 8 (-2^63 ~ 2^63-1) 0l或者0L Long
byte 1 [-128,127] 0 Byte
float 4 32位IEEE754 单精度范围 0.0f或者0.0F Float
double 8 64位IEEE754 双精度范围 0.0 Double
char 2 Unicode [0,65535] u0000 Character
boolean 1 true 和 false false Boolean

以上这些基本类型可以分为如下 4 种类型:

  1. int 长度数据类型:byte (8 bit)、short (16 bit)、int (32bit)、long(64bit)。
  2. float 长度数据类型:单精度(32 bit float)、双精度(64 bit double)。
  3. boolean 类型变量的取值:true、false。对于 boolean 占用空间的大小,从理论上讲,只需要 1bit 就够了,但在设计的时候为了考虑字节对齐等因素,一般会考虑使其占用一个字节。由于 Java 规范没有明确的规定,因此,不同的 JVM 可能会有不同的实现。
  4. char 数据类型:unicode 字符(16 bit)。

2. 什么是不可变类

不可变类(immutable class)是指当创建了这个类的实例后,就不允许修改它的值了,也就是说,一个对象一旦被创建出来,在其整个生命周期中,它的成员变量就不能被修改了。它有点类似于常量(const),即只允许别的程序读,不允许别的程序进行修改。在Java类库中,所有基本类型的包装类都是不可变类,例如 Integer、Float 等。此外,Sring 也是不可变类。

/*** 创建时间 2021/8/2 8:55* String类的测试* @author Ye* @version 1.0*/
public class Test9 {public static void main(String[ ]args) {String s = "Hello";s += " world";System.out.println(s);}
}//运行结果: Hello world

可能我们会产生这样一个疑问,为什么我们可以给一个String的s变量赋新的值。其实,s是String类型的引用,当执行s += " world";时s指向的一个内容为Hello world的对象,而Hello依然在内存中,没有改变。

3. 值传递与引用传递的区别

方法调用是编程语言中非常重要的一个特性,在方法调用时,通常需要传递一些参数来完成特定的功能。Java 语言提供了两种参数传递的方式:值传递和引用传递。

  1. 值传递:在方法调用中,实参会把它的值传递给形参,形参只是用实参的值初始化一个临时的存储单元,因此形参与实参虽然有着相同的值,但是却有着不同的存储单元,因此对形参的改变不会影响实参的值。
  2. 引用传递:在方法调用中,传递的是对象(也可以看作是对象的地址),这时形参与实参的对象指向同一块存储单元,因此对形参的修改就会影响实参的值。

在Java语言中,原始数据类型在传递参数时都是按值传递,而包装类型在传递参数时是按引用传递的。

4. Math类中的round、ceil和floor方法的功能各是什么

round、ceil 和 floor 方法位于 Math 类中,Math 是一个包含了很多数学常量与计算方法的类,位于 java.lang包下,能自动导人,而且 Math 类里边的方法全是静态方法。下面介绍这3 个方法代表的含义。

  1. round 方法表示四舍五人。round,意为“环绕”,其实现原理是在原来数字的基础上先增加 0.5 然后再向下取整,等同于(int)Math. floor(x +0.5f)。它的返回值类型为 int型,例如,Math. round(11.5)的结果为 12,Math. round(-11.5)的结果为-11。
  2. ceil 方法的功能是向上取整。ceil,意为“天花板”,顾名思义是对操作数取顶,Math. ceil( a),就是取大于 a的最小的整数值。需要注意的是,它的返回值类型并不是 int 型,而是double型。若a是正数,则把小数“入”,若a是负数,则把小数“舍”。
  3. floor 方法的功能是向下取整。floor,意为“地板”,顾名思义是对操作数取底。Math. floor(a),就是取小于a的最大的整数值。它的返回值类型与 ceil 方法一样,也是 double型。若a是正数,则把小数“舍”;若a是负数,则把小数“入”。

5. ++i与i++有什么区别

在编程时,经常会用到变量的自增或自减操作,尤其在循环中用得最多。以自增为例,有两种自增方式:前置与后置,即++i和 i++,它们的不同点在于 i++是在程序执行完毕后进行自增,而++i是在程序开始执行前进行自增,示例如下:

/*** 创建时间 2021/8/2 10:16* ++i和++i测试* @author Ye* @version 1.0*/
public class Test10 {public static void main(String[] args) {int i = 1;System.out.println(i++ + i++);System.out.println("i = " + i);System.out.println(i++ + ++i);System.out.println("i = " + i);System.out.println(i++ + i++ + i++);System.out.println("i = " + i);}}

运行截图:

6. 如何实现无符号数的右移操作

Java 提供了两种右移运算符:“>>”和“>>>”。其中,“>>”被称为有符号右移运算符,“>>>”被称为无符号右移运算符,它们的功能是将参与运算的对象对应的二进制数右移指定的位数。二者的不同点在于“>>”在执行右移操作时,若参与运算的数字为正数,则在高位补 0;若为负数,则在高位补 1。而“>>>”则不同,无论参与运算的数字为正数或为负数,在执行运算时,都会在高位补 0。

7. char型变量中是否可以存储一个中文汉字

在Java 语言中,默认使用的 Unicode 编码方式,即每个字符占用两个字节,因此可以用来存储中文。虽然 String 是由 char 所组成的,但是它采用了一种更加灵活的方式来存储,即英文占用一个字符,中文占用两个字符,采用这种存储方式的一个重要作用就是可以减少所需的存储空间,提高存储效率。

可以用字节数与字符串长度是否相等来判断字符串是否包含中文,代码如下:

import java.util.regex.Matcher;
import java.util.regex.Pattern;
/*** 创建时间 2021/8/2 13:52* 判断字符串中是否包含中文* @author Ye* @version 1.0*/
public class Test11 {public static void judgeChineseCharactor(String str) {String regEx = "[ \u4e00-\u9fa5]";//判断是否存在中文字符if (str.getBytes().length == str.length()) {System.out.println("无汉字");} else {//如果存在中文字符,找出字符串中的中文字符Pattern p = Pattern.compile(regEx);Matcher m = p.matcher(str);while(m.find()){//输出中文,并删除空格System.out.print(m.group(0).replace(" ","") + "");}}}public static void main(String[] args){judgeChineseCharactor("Are you ok.");judgeChineseCharactor("     你好                hhh     , 我也不知道         ");}
}

运行截图:

参考:《Java程序员面试笔试宝典》 何昊、薛鹏、叶向阳 编著

Java基础知识(四) 基本类型与运算相关推荐

  1. 跳槽者、应届生必看JAVA面试题系列 - JAVA基础知识(四)

    一: 前言 莫等闲,白了少年头,空悲切. 二: 面试挑战   在文章开始前,首先安利下"面试挑战": 凡是满足下面的挑战条件的,如果一个月内没有拿到一个Offer的,免费提供简历封 ...

  2. Java基础知识 变量 基本类型 类型转换 标识符 关键字 运算符 循环 分支结构 JVM

    标题JVM **java语言是跨平台的,之所以跨平台是因为在不同的系统中安装不同的JVM这是Java跨平台的前提** 2.JDK:开发工具包-开发必须安装 JRE:运行时环境 JVM:Java虚拟机, ...

  3. MATLAB 语言基础知识 数据类型 数值类型 单精度运算

    本文说明如何对单精度数据执行算术运算和线性代数运算.此外,还说明了如何根据输入相应地按单精度或双精度计算结果. 创建双精度数据 首先创建一些数据,默认情况下为双精度. Ad = [1 2 0; 2 5 ...

  4. Java基础知识(五) 字符串与数组

    Java基础知识 字符串与数组 1. 字符串的创建与存储的机制是什么 2. "==".equals和hashCode有什么区别 3. String.StringBuffer.Str ...

  5. JAVA基础知识(四)面向对象基础

    文章目录 JAVA基础知识(四)面向对象基础 1. 类 2. 访问权限修饰符 3. `static`修饰符 3.1 静态代码块 4. `new`一个对象 5. 方法 5.1 `this` 5.2 方法 ...

  6. 【转】Java基础知识整理

    本博文内容参考相关博客以及<Java编程思想>整理而成,如有侵权,请联系博主. 转载请注明出处:http://www.cnblogs.com/BYRans/ PDF版下载链接:<Ja ...

  7. java 基础知识总结

    Java基础知识总结 写代码: 1,明确需求.我要做什么? 2,分析思路.我要怎么做?1,2,3. 3,确定步骤.每一个思路部分用到哪些语句,方法,和对象. 4,代码实现.用具体的java语言代码把思 ...

  8. Java 基础知识总结(下)-王者笔记《收藏版》

    上一篇 Java基础知识学习总结之(上) 下一篇 Java 集合容器篇面试题  (上) java毕业设计项目<100套>推荐 毕设/私活/大佬必备,一个挣钱的开源前后端分离脚手架 2W字梳 ...

  9. 【转】java基础知识总结

    Java基础知识总结 本博文内容参考相关博客以及<Java编程思想>整理而成,如有侵权,请联系博主. 转载请注明出处:http://www.cnblogs.com/BYRans/ PDF版 ...

最新文章

  1. 知乎高赞:OracleJDK和OpenJDK有什么区别?网友:不愧是大神的回答~
  2. linux进程间通讯-共享内存
  3. 版本发布后软件测试人员要做的工作
  4. Commons-logging + Log4j 入门指南
  5. boost::leaf::capture用法的测试程序
  6. qt中数据库操作总结
  7. GCC如何产生core dump
  8. linux增加阵列磁盘空间,Linux Ubuntu系统下通过LVM创建软raid来实现硬盘合并大小
  9. (转载)JavaWeb学习总结(五十二)——使用JavaMail创建邮件和发送邮件
  10. [编程题] 被3整除
  11. python绘制聚类分析树状图
  12. 【读书笔记】曾国藩的正面与侧面(二)
  13. sql优化相关概念,explain的使用说明
  14. snmp使用默认团体名_snmp默认团体名/弱口令漏洞及安全加固
  15. Python制作自己的软件安装包程序
  16. MAC默认软件安装位置
  17. 智慧物流wms仓储管理系统
  18. 【软件测试教程】Jmeter接口测试+压力测试
  19. [论文笔记]slope one predictors for online rating-based collaborative filtering
  20. C#项目实战——YModem协议文件传输【实例】

热门文章

  1. 骨干是折腾出来的 读书笔记10
  2. java实现图片的压缩且保留图片尺寸不变
  3. Js基础引导(二)——语法
  4. linux安装软路由,软路由安装设置教程【详细步骤】-太平洋IT百科手机版
  5. 人工智能python好学吗_人工智能“速成班”Python好学吗 小心别被忽悠了
  6. video在iPhone浏览器上播放没有声音
  7. 「GoTeam 招聘时间」滴滴出行系统研发工程师(北京)
  8. 计算机的操作系统属于什么系统,操作系统是计算机系统中的什么?
  9. 关于逆向工程,解决mysql数据库遇到的1406问题,ERROR 1062 (23000): Duplicate entry '0' for key 'PRIMARY'
  10. unity -- 泛型