比较
python
is, is not 对比的是两个变量的内存地址
==,!= 对比的是两个变量的值
3 == 3 √
3 is 3 √
None is None √
None == None √
[1,2] ==[1,2] √
[1,2] is [1,2] ×
java
基本数据类型:值分配在内存栈上 引用数据类型:对象本身的值分配在内存堆上 都是直接分配在内存栈上,不过引用数据类型在栈上分配的是引用,对象本身的存储在内存堆上
- 比较基本类型 : 没有.equals方法
只能用==
- 比较对象 object.equals(obj) 比较内存地址
==和equals比较的都是内存地址
- 比较基本数据类型封装类和String
对equals方法进行了重写,比较的是值
equals判断值是否相同 a.equals(b)
==判断是否为同一对象(根据内存地址),引用是否相同
null
python
if root: #root 存在
if not root # root不存在 为null
java
if (p!=null) //root存在
if (p==null) //root不存在
C++
if (p!=NULL) //root存在
if (p==NULL) //root不存在
指针
python && java
没有指针,所以node.next
c++
有指针
p->next,node.next
if
- python
if(可是int or ListNode)都可转换为boolean
ListNode p = None
int a = 0
if (node or a): print("bingo)
- java
if(boolean || boolean)int=0,node=null也不能转换为boolean
if (null) ×
if (0) ×
if (null || 1) ×ListNode node = null;
int a = 0;
if (node!=null || a>0) System.out.print(“bingo”)
- c++
- 同python
ListNode* p = null;
int a = 0;
if(p || a) cout << “bingo” << endl;
%
取余和取模相同点:对于正数返回同样的余数r c=a/b r=a-c*b
- c++/java
%为取余,向0方向舍入:-23%10==-2…-3 23%10==2…3
- python
%为取模,向负无穷方向舍入:-23%10==-3…7 23%10=2…3
字符变数字
- python
int(ch) 因为python没有字符类型,只有字符串
- java/c++
ch-‘0’
round
- python
round(3.7)#返回4
round(3.3)#返回3
round(-3.7)#返回-4
round(-3.3)#返回-3
round(3.5)#返回4
round(-3.5)#返回-4
- java
Math.round(3.7);//返回4
Math.round(3.3);//返回3
Math.round(-3.7);//返回-4
Math.round(-3.3);//返回-3
Math.round(3.5);//返回4
Math.round(-3.5);//返回-3 跟python不一样,原因见下
public static long round(double a) {
if (a != 0x1.fffffffffffffp-2) // greatest double value less than 0.5
return (long)floor(a + 0.5d);
else
return 0;
}
区别
java python 区别 容易出错操作:
字符可以相减:‘1’-‘0’==1; python不用是否为单引号来区分字符和字符串,‘1’-'0’不可行,int(‘1’)-int(‘0’)
str.charAt(index) 取字符,不能用str[i],而python可以使用str[i]
1/3 保留整数(浮点数-》int,精度损失,下取整)【只有当浮点数参与时,才变为浮点数】,而python 1/3为浮点数,int(1/3)保留整数 str->变整数,Integer.parseInt(str),当字符串过长时,需要用BigInteger类,此时效率很低,而python 无此现象 int(str)即可,效率不低
Math.pow(a,b)【见前面】 ,而python a**b
需要考虑数字位数,而python,在数字超过当前类型能表达的最大数字时,会直接会进行转换(int->long,long在python中可表示无限大的数【受内存控制】),相当于Java中的BigInteger