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

本文对比了Python、Java和C++中的一些关键概念,包括变量的比较(is、is not、==、!=)、null的处理、指针的使用、条件语句的差异,以及%运算符、字符转数字和round函数的行为。在Python中,is检查内存地址,而==检查值;null在Python中是None,而在Java和C++中有不同的表示方式;Python中的if语句可以直接使用整数或对象,而Java和C++则有不同规定。此外,还讨论了三者在取余/取模、字符转数字和round函数上的区别。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

比较

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值