在java和python和c++中的 比较/null/指针/if/%/字符变数字/round/区别

比较

python

is, is not 对比的是两个变量的内存地址
==,!= 对比的是两个变量的值
3 == 3 √
3 is 3 √
None is None √
None == None √
[1,2] ==[1,2] √
[1,2] is [1,2] ×

java

  基本数据类型:值分配在内存栈上
  引用数据类型:对象本身的值分配在内存堆上
  都是直接分配在内存栈上,不过引用数据类型在栈上分配的是引用,对象本身的存储在内存堆上
  1. 比较基本类型 : 没有.equals方法

只能用==

  1. 比较对象 object.equals(obj) 比较内存地址

==和equals比较的都是内存地址

  1. 比较基本数据类型封装类和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

发布了78 篇原创文章 · 获赞 7 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/puspos/article/details/101517654
今日推荐