JAVA的语言特点
简单性:Java语言的语法是基于C++的,但去除了C++中一些复杂和难以理解的概念,如指针、多重继承等,因此Java语言相对比较简单,易于学习和使用。
面向对象:Java语言是完全面向对象的编程语言,它将一切事物都看作对象,通过类和对象来描述现实世界中的事物。面向对象的编程思想可以提高程序的复用性、可维护性和可扩展性。
跨平台性:Java语言通过Java虚拟机(JVM)实现了跨平台性。Java程序经过编译后会生成字节码,JVM会根据不同的操作系统将字节码转换成机器码,因此Java程序可以在任何支持JVM的操作系统上运行。
安全性:Java语言在设计之初就考虑了安全性,它提供了一系列安全机制来防止恶意代码的攻击。例如,Java语言没有指针,因此无法直接访问内存,从而降低了安全风险。
可移植性:Java程序经过编译后会生成字节码,字节码是独立于平台的,因此Java程序可以很容易地移植到其他平台上。
高性能:Java语言采用了编译和解释相结合的模式,在执行效率方面兼顾了效率和灵活性。
多线程:Java语言支持多线程,可以实现多个任务并发执行,提高程序的执行效率。
基本数据类型和引用数据类型的区别
一、.存储上的区别
1.基本数据类型是存放在栈中的简单数据段。
2.引用数据类型是存放在堆内存中的对象,在栈内存中存放的是堆内存中具体内容的引用地址,通过这个地址可以快速查找到对象。
二、比较上的区别
1.基本数据类型的比较是值的比较
var a = '{}'
var b = '{}'
console.log(a == b) //true
直接比较值,看起来一样那么他就是一样的。
2.引用类型的比较是引用的比较
var a = {}
var b = {}
console.log(a == b) //false
问:看起来明明一样为什么会是false?
答:因为引用类型比较的是地址,也就是比较两个对象保存在栈区的指向堆内存的地址是否相同,虽然看起来一样,但是他们指向堆内存的地址是不一样的,所以两个对象不相等。
三、赋值上的区别
1.基本数据类型的赋值是简单赋值,如果一个变量向另一个变量赋值基本类型的值,会在变量对象上创建一个新值,然后把这个值复制到为新变量分配的位置上。
var a = 10
var b = a
a++
console.log(a) //11
console.log(b) //10
a在内存中保存的值是10,当使用a的值来初始化b时,b中也保存了10,这两个值是完全独立的,相当于b把a的值复制了一份,所以两个变量的任何操作都不会互相影响。
2.引用类型的赋值是对象引用
var a = {}
var b = a
a.name = "haha"
console.log(a.name) //haha
console.log(b.name) //haha
b.age = 29
console.log(a.age) //29
console.log(b.age) //29
当一个变量向另一个变量赋值引用类型的值时,同样也会将栈内存中的值复制一份放到新变量分配的空间中,但是引用类型保存在栈内存中的变量是一个地址,这个地址指向的是堆内存中的对象,所以这个变量其实复制了一个地址,两个地址指向同一个对象,改变其中任何一个变量都会互相影响。
Java的运算符
1. 算术运算符
算术运算符都是双目运算符,即连接两个操作数的运算符。优先级上,*、/、% 具有相同运算级别,并高于 +、-(+、- 具有相同级别)
2. 自增(++)、自减(- -)运算符
++ 或 - - 是单目运算符,放在操作数的前面或后面都是允许的。
++运算,变量自增长1;- -运算,变量自减少1。
那么如果有一个变量i,++i和i++有什么区别呢?
独立运算时:i++和++i没有区别,都是实现自动加1的功能
混合运算时:i++和++i就不同了
++ 或 - - 是单目运算符,放在操作数的前面或后面都是允许的。
++运算,变量自增长1;- -运算,变量自减少1。
那么如果有一个变量i,++i和i++有什么区别呢?
独立运算时:i++和++i没有区别,都是实现自动加1的功能
混合运算时:i++和++i就不同了
3.赋值运算符
赋值运算符是指为变量或常量指定数值的符号。赋值运算符的符号为“=”,例如 int a=2.
它是双目运算符,左边的操作数必须是变量,不能是常量或表达式。
记住在Java中两个数相等用的符号是==,而=是赋值运算符。
例如 int a=1,int b=1,如果表示a等于b,则是a==b
赋值运算符可以和算数运算符组成复合赋值运算:
等于号:=(用于给变量赋值)
加等于:+=
减等于:-=
乘等于:*=
除等于:/=
取模等于:%=
4.关系运算符
关系运算符用来比较两个值的关系。关系运算符是二元运算符,运算结果是 boolean 型。当运算符对应的关系成立时,运算结果是 true,否则是 false。
- 相等:==(如果判断正确结果为true)
- 小于号:<
- 大于号:>
- 小于等于:<=
- 大于等于:>=
- 不等于:!=
5.逻辑运算符
逻辑运算符分为:
短路逻辑运算符
逻辑运算符
短路逻辑运算符 与 逻辑运算符 的区别是:
逻辑运算符:先走一遍,在判断
短路逻辑运算符:一但符合条件,后面的判断不走
注意:短路与(&&)和短路或(||)能够采用最优化的计算方式,从而提高效率。
1. 逻辑运算符
逻辑运算符:&、|、^、!
2. 短路逻辑运算符
短路逻辑运算符:&&、||
- 双与:&&(全真才是真)
- 单与:&(全真才是真)
- 双或:||(全假才是假)
- 单或:|(全假才是假)
- 取反:!
6.三元运算符
该运算符由三个操作数组成,用于判断布尔表达式。它的目的是确定应将哪个值分配给变量。条件运算符的语法为:
变量 = (布尔表达式) ? 值1 : 值2
7.instanceof 运算符
该运算符用于操作对象实例,检查该对象是否是一个特定类型(类类型或接口类型)。
instanceof运算符使用格式如下:
( Object reference variable ) instanceof (class/interface type)
如果运算符左侧变量所指的对象,是操作符右侧类或接口(class/interface)的一个对象,那么结果为真。
下面是一个例子:
String name = "James";
boolean result = name instanceof String; // 由于 name 是 String 类型,所以返回真