Java与C++的区别

原创 2016年07月04日 20:38:14

因为即会C++又懂点Java的缘故,就朋友的邀请,共同合作一个项目——“把一个Java工程的项目转成C++”。这个项目前前后后历时约两周,采了不少坑……现把Java和C++的主要区别总结一个,从中吸取教训。


1.定义变量和数组时,Java默认初始化,C++不初始化;

在类中,方法中定义变量、动态数组时,Java默认初始化,C++不初始化。
如下Java代码

public class Test {
    public void testValue() {
        int arr[] = new int[4];
        System.out.println("int value:  " + iValue);
        System.out.println("float value:" + fValue);
        for (int i = 0; i < arr.length; i++) {
            System.out.print(arr[i] + "\t");
        }
    }

    private int iValue;
    private float fValue;
}

结果如下:

int value: 0
float value:0.0
0 0 0 0

如下C++代码:
[cpp]
class Test
{
public:
void TestValue()
{
int arr[4];
std::cout << “int Value: ” << iValue << std::endl;
std::cout << “float Value: ” << fValue << std::endl;
for (int i = 0; i < 4; i ++)
{
std::cout << arr[i] << “\t”;
}
std::cout << std::endl;
}
private:
int iValue;
int fValue;
};
[/cpp]

结果如下:

int Value: -858993460
float Value: -858993460
-858993460 -858993460 -858993460 -858993460

因为变量未进行初始化,结果是一个任意的值,这将是非常危险的。因此C++的代码在定义变量后必须给其进行初始化。

2.Java中有垃圾回收机制,C++没有。

Java中有垃圾回收机制,Java中new对象后不用管,不用考虑释放;虚拟机会自动去回收内存;C++中new了对象或分配内存后一定要记得释放,不然就会内存泄漏;要使C++创建对象自行释放,要自己实现一套引用计数的机制。

int* pArr = new int[5];
// todo: add your operation code
delete[] pArr;
pArr = NULL;

Test* p = new Test();
// todo: add your operation code
delete p;
p = NULL;

3.Java中只有引用,没有指针;C++中有引用,也有指针。

如下面的Java代码中

    Test t = new Test();

new Test()创建了一个Test类的对象,t是指向这一对象的引用。

C++中有指针,也有引用:

// 创建一个Test的对象,并将该对象的内存地址赋给指针p
Test* p = new Test();
// 定义一个Test的对象
Test t;
// 定义一个Test的引用t2,并将其t的对象.相当于t的别名
Test& t2 = t;

因为没有指针,Java代码的可读性好,更也安全;相较而言,C++就更难懂,但更灵活(特别是算法的一些操作时,指针的存在使数据和内存的操作变得极大的方便和灵活)。

4.在定义类的成员时,Java可以赋初值,C++不可以

如Java中,可以这样定义:

public class Test {
    private int iValue = 0;
    private float fValue = 10.5f;
    private String name = "zhangsan";
}

而C++中则不可以这样定义:

class Test
{
public:
    int iValue = 0;
    int fValue = 10.5;
    std::string name = "zhangsan";
};

C++11之前都不能有上面这样的定义。编译时将报类似如下的错误:

error C2864: ‘Test::iValue’ : only static const integral data members can be initialized within a class

但VS2015支持上面的定义,但VS2015好像已经支持C++14、C++17标准了。

5.函数的参数,C++可以有默认形参,Java不可以

C++的函数可以有这样的定义:

void Func(int arg1, int arg2 = 10)
    {
        // todo: add your code.s
    }

Java不支持这样定义

6.Java中用final修饰不改变的成员,C++用const修饰不可改变的变量

Java中可以有这样的定义:

public class Test {
    public static final float PI = 3.141592653f;
    // todo: other code.
}

C++中可以有这样的定义:

const float PI = 3.141592653;
class Test
{
public:
    float CircleArea(float r)
    {
        return PI * r * r;
    }

    static const int R = 1; // 颜色标志,1代表红色
    static const int B = 2; // 颜色标志,2代表红色
};

除特殊注明,阳光日志下文章均为原创,转载转载请注明出处

本文地址: http://sunlogging.com/2016/07/03/java转c时需注意的区别

版权声明:本文为博主原创文章,未经博主允许不得用于任何商业用途,转载请注明出处。

Java与C++的异同点总结

Java与C++都是面向对象的语言,都使用了面向对象的思想(封装、继承、多态),由于面向对象由许多非常好的特性(继承、组合等),因此二者有很好的可重用性。 不同点: 1、Java为解释性语言,其运行过...
  • SHENNONGZHAIZHU
  • SHENNONGZHAIZHU
  • 2016年07月14日 15:55
  • 6834

C++和java的区别和联系

最近在看C++和java的基础知识,对它们面向对象编程的概念还不是很了解,但觉得它们之间有很多相通的地方,现在java比较热门,觉得使用java的框架可以做很多很多事情,而对C++ 的认识只知道在游戏...
  • lcr_happy
  • lcr_happy
  • 2017年04月09日 10:32
  • 794

java与C++语法上的差别

本人现在是一名C++开发人员,在业余的时间学习了java。在此简单的总结了一些C++与java一些基本语法的区别。希望能够给大家一些参考,也方便自己日后复习。 1.C++中成员变量和...
  • huashuolin001
  • huashuolin001
  • 2016年04月24日 18:24
  • 511

13.java和c++最大的区别

Java并不仅仅是C++语言的一个变种,它们在某些本质问题上有根本的不同:   (1)Java比C++程序可靠性更高。有人曾估计每50行C++程序中至少有一个BUG。姑且不去讨论这个数字是否夸张,但...
  • u010273362
  • u010273362
  • 2017年08月29日 20:20
  • 397

C++和Java,绝不只是语法不同这么简单

说到面向对象,我们的脑海中立马会涌现出C++,java,object-C 这几个大类的语言,甚至是C#。似乎看来,他们都是面向对象的不同实现而已(博主这句话就很C++了)。尤其对于初学者而言,很难显见...
  • helinlin007
  • helinlin007
  • 2016年07月26日 17:02
  • 13477

C++与JAVA语言区别

“作为一名C++程序员,我们早已掌握了面向对象程序设计的基本概念,而且Java的语法无疑是非常熟悉的。事实上,Java本来就是从C++衍生出来的。”   然而,C++和Java之间仍存在一些显著的差...
  • u012840636
  • u012840636
  • 2013年11月14日 20:06
  • 1415

Java和C/C++的差异总结

总结一下Java的小知识,只是想稍微提醒一下自己这些基础的东西,放在这里,随时可以阅览和添加一下,以免走错了方向。 1.面向对象程序设计 面向对象程序设计语言可以直观的反映客观世界的真实表...
  • Frimish
  • Frimish
  • 2015年12月08日 15:17
  • 1129

Java与C/C++的异同点

Java和C++都是面向对象得语言,都使用了面型对象的思想(封装,继承,抽象与多态)。由于面向对象有许多良好的特性,使得他们都有很好的可重用性。但是,他们之间又存在较多的差异: 1. Java为解释...
  • qq_28168421
  • qq_28168421
  • 2016年11月29日 18:04
  • 517

Java和C++语法区别

今天早上写了几个控制台程序来找了几个c++和java的语法区别和几点新学会的知识: 1.java中的类静态变量访问是用A.n,而c++是A:n 2.java中基于安全机制,所有变量都会有默认值对变...
  • ismallboy
  • ismallboy
  • 2014年03月30日 16:05
  • 1366

C++与Java的语法区别

 C++与Java的语法区别首先,两个大的不同是主函数和怎样编译的不同,接下来是许多小的区别。main 函数C++//自由浮动的函数int main( int argc, char* argv[]){...
  • xylary
  • xylary
  • 2007年07月04日 13:52
  • 9955
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Java与C++的区别
举报原因:
原因补充:

(最多只允许输入30个字)