Por que Java é a língua franca em tantas instituições? [fechadas]

22

Edição: Esta questão no início parece bashing Java, e acho que neste momento é um pouco. No entanto, o ponto mais importante que estou tentando destacar é por que qualquer idioma único é escolhido como o único fim, tudo solução para todos os problemas. Por acaso, o Java é o que é usado, por isso tive de bater aqui, mas não sou intencional: rasgar o Java por um novo :)

Eu não gosto de Java na maioria das configurações acadêmicas. Não estou dizendo que o idioma em si seja ruim - ele tem vários aspectos extremamente desejáveis, o mais importante é a capacidade de executar sem recompilação na maioria das plataformas. Não há nada errado em usar o idioma para o seu próximo aplicativo ^ TM. (Não é algo que eu faria pessoalmente, mas é mais porque tenho menos experiência com isso, em vez de ser ruim no design)

Eu acho que é um desperdício que cursos de CS de alto nível sejam ministrados usando Java como linguagem. Muitos dos meus colegas não conseguem programar nada, porque não sabem como trabalhar em um mundo sem coleta de lixo. Eles não entendem fundamentalmente as máquinas para as quais estão programando. Quando alguém pode trabalhar fora de um mundo coletado de lixo, ele pode trabalhar dentro de um, mas não vice-versa. GC é uma ferramenta, não uma muleta. Mas a maneira como é usada para ensinar estudantes de ciência da computação é uma muleta.

A ciência da computação não deve ensinar um conjunto completo de cursos adaptados a um único idioma. Os alunos partem da ideia de que todo bom design é um design Java idiomático e que o Design Orientado a Objetos é a ÚNICA MANEIRA VERDADEIRA DE QUE É A ÚNICA MANEIRA QUE AS COISAS PODEM SER FEITAS. Outras línguas, pelo menos uma delas não sendo uma coleta de lixo, devem ser usadas no ensino, a fim de dar ao graduado uma melhor compreensão das máquinas.

É uma vergonha que alguém com um PHD em CS de uma instituição respeitada não consiga programar o caminho para sair de um saco de papel.

O pior é que, quando converso com os professores de CS que realmente entendem como as coisas funcionam, eles compartilham sentimentos como este, que estamos fazendo um desserviço aos nossos alunos, fazendo tudo em Java. (Observe que o acima seria o mesmo se eu o substituísse por qualquer outra linguagem, geralmente usando um único idioma é o problema, não o próprio Java)

No total, sinto que não posso mais respeitar nenhum tipo de diploma - quando não consigo ver os que estão ao meu redor capazes de programar a saída de problemas de zumbido.

Por que / como foi assim?

Billy ONeal
fonte
9
Não se preocupe. Dê uma chance à Oracle e eles remediarão a situação :) Seus processos contra o Android e o Apache são apenas o começo de afastar os desenvolvedores. Ensino em uma instituição que adotou o exposto como uma sugestão para começar a ensinar Python, antecipando o mercado futuro.
SamGoody
3
A que configurações acadêmicas você está se referindo? Não conheço de imediato qualquer lugar em que os alunos do CSci devam aprender apenas um idioma. (Passado eu estava na escola, você poderia ter começado perto com C e Scheme, eu acho que, se você escolheu suas classes principais e com cuidado, mas você estaria usando pelo menos duas línguas diferentes.)
David Thornley
16
Você pode explicar como o cache L1 funciona? Você pode criar uma ALU? Você pode explicar as equações de Maxwell? E as propriedades termodinâmicas da sua placa-mãe? Você poderia construir uma unidade USB? Você REALMENTE sabe como o seu computador funciona? Ou você escolheu um nível de abstração apropriado para seus interesses e partiu daí?
MetricSystem
5
Porque decidir que você precisa entender o gerenciamento de memória para "entender fundamentalmente as máquinas para as quais estão programando" é um nível completamente arbitrário para parar. Se não for necessário entender os problemas nos quais você está interessado, seu tempo costuma ser mais bem estudado no que você está interessado (já que ninguém tem tempo suficiente para aprender tudo). E qualquer argumento que você apresentar sobre por que os programadores Java precisam aprender o gerenciamento de memória pode ser estendido infinitamente até que todos precisem conhecer a física atômica para "entender" qualquer coisa.
MetricSystem
7
Além disso, se alguém tem um argumento de palha aqui, é você, já que nunca ouvi falar de um único programa de CS que apenas apresenta Java como uma linguagem de programação.
MetricSystem

Respostas:

30

Este não é um problema de Java, é um problema de ensino. Não saber programar não é uma falha de idiomas, é uma falha dos alunos. O mesmo vale para todos os seus problemas, GC, conhecimento básico de máquinas, como as coisas funcionam "sob o capô", por assim dizer.

Sua queixa principal sobre a coleta de lixo me deixa levemente. A menos que você esteja fazendo uma coleta de lixo em C ou C ++, normalmente é muito bom e não é um problema. Você prefere que todos aprendam montagem? Idiomas de nível superior que são rigorosos são muito úteis para o ensino. Ele oferece a flexibilidade de bibliotecas, pacotes e outros detalhes quando você precisar, sem a linguagem confusa "sugar" presente na maioria das outras linguagens de nível superior (PHP, Ruby, Python, Perl).

Josh K
fonte
5
Não estou dizendo que os idiomas de nível superior não devam ser ensinados. Mas estou dizendo que algo de nível inferior (da ordem de C ou Fortran ou alguma outra linguagem de programação de sistemas) também deve ser ensinado. (Ir abaixo de C é menos útil porque, abaixo desse nível, qualquer coisa que você aprender será específica para uma única arquitetura de máquina). Não estou dizendo que todos os graduados em CS devem ser ótimos programadores de baixo nível. Mas estou dizendo que, se confrontados com um problema de baixo nível, eles não devem cuspir e morrer, como todos os alunos ao meu redor parecem fazer.
Billy ONeal
3
@ Billy: Ir mais baixo do que o seu nível de aprendizado inicial é difícil. Encontro-me a olhar para o código C ++ / C e ter um pouco de diversão tempo envolvendo minha cabeça em torno dela. Não espere milagres, mas também não espere anjos. Os programadores precisam ter controle, sem que todos "engasgem e morram" rapidamente, independentemente do nível do problema.
Josh K
5
@ Josh: Justo, mas a exposição formal do IMHO a pelo menos um outro ambiente de programação deve ser uma necessidade para se obter um diploma em CS. O diploma não diz "eu entendo Java", mas "eu entendo CS". Os dois não são os mesmos e você não pode obter um entendimento completo do CS usando Java (ou, nesse caso, qualquer linguagem) sozinho. (BTW, +1)
Billy ONeal
2
@ Josh: Incapacidade de depurar em níveis baixos, e uma capacidade bastante reduzida de raciocinar adequadamente sobre as implicações do código que eles escrevem.
Mason Wheeler
1
Conheço programadores que apenas aprenderam Java e têm medo de C ++ ou C porque precisam usar ponteiros. Não sei se alguém que não pode programar com ponteiros pode ser considerado um verdadeiro programador: afinal, todos os computadores e tempos de execução modernos ainda se baseiam em uma arquitetura básica que envolve registros, memória principal, pilha e pilha. Por isso, prefiro programar em Java do que em C ++ (é definitivamente mais fácil fazer as coisas se você não precisar se preocupar com gerenciamento de memória), mas concordo que o ensino não deve se restringir definitivamente a Java.
Giorgio
12

As universidades estão realmente fazendo isso? Ou isso é apenas uma percepção que as pessoas têm quando obtêm um candidato ruim para uma entrevista de emprego?

Eu me formei em CS há 4 anos e, embora o Java fosse usado nas aulas de introdução, ele não foi particularmente enfatizado depois disso. Em primeiro lugar, os principais cursos exigidos exigiam que você aprendesse Java, C, C ++, SML (linguagem de programação funcional), assembly, matlab e CAST (linguagem de descrição de circuitos). Isso não leva em consideração todos os cursos teóricos e matemáticos de CS e, é claro, a meia dúzia de cursos eletivos de CS que o teriam exposto a muito mais. Conversando com amigos em várias universidades diferentes, não parecia que o que eles estavam fazendo era muito diferente.

Se há universidades ensinando apenas Java, isso é realmente uma tragédia. Não porque Java é ruim, mas porque é apenas uma ferramenta de muitas que deve estar disponível para um programador. Um desenvolvedor que conhece apenas Java é equivalente a um carpinteiro que sabe apenas usar um martelo. No entanto, tenho dificuldade em acreditar que esse seja realmente o caso, pelo menos para as universidades respeitadas. Eu suspeito que essa é apenas a percepção de ver candidatos ruins e culpar a escola pela incompetência dos candidatos, e não pela falta de motivação / motivação / curiosidade / profissionalismo / etc.

Yevgeniy Brikman
fonte
2
Acordado. Acabei de me formar há alguns anos e, enquanto a maioria das minhas aulas era ministrada em Java, era difícil me formar sem ter uma aula ministrada em C ou C ++, e também tínhamos um curso de linguagem de programação que enfatizava o uso de Haskell .
Mipadi
No meu curso, fizemos Pascal primeiro, depois Java como nossa linguagem OO. No segundo ano, 90% dos profissionais não se importavam com o idioma que você usava. Alguns de nós usaram c / c ++ / ruby ​​/ C # / python / até haskell, mas a maioria das pessoas ficou com o que sabia, java. Apenas alguns cursos necessários usando o assembly / c / c ++, ou seja, coisas como o curso de gráficos 3D (opcional), são muito aplicados pelo c / c ++ para opengl. E, obviamente, o curso de sistemas básicos reforçou a montagem SPARC (porque estávamos trabalhando intencionalmente e em um nível baixo). Ouvi dizer que eles já se mudaram para python / c ++ no 1º ano agora embora ....
Aren
11

Estou realmente surpreso que esta seja a situação de muitas escolas. Quando me formei em CS, tive uma série de cursos de idiomas que incluíam todos os idiomas populares do dia (quase 40 anos atrás): assembler (Univac 1108 e MIX), FORTRAN IV, SNOBOL4, COBOL, Lisp e Algol 68. Não consigo imaginar ter apenas um idioma sendo ensinado. Ou como eu poderia apreciar o que os compiladores tinham que fazer sem ter escrito alguns programas assembler.

Usamos Algol e FORTRAN na maioria dos cursos de dados e algoritmos. Eu gostaria de ter passado mais tempo com o Lisp - em vez disso, tivemos apenas uma introdução e agora estou tentando reaprender alguns dos conceitos. Usamos o SNOBOL4 para escrever analisadores - e sua correspondência de padrões com o backtracking criou uma boa base para o trabalho posterior das bibliotecas regex incluídas em muitas linguagens modernas.

Essa introdução a meia dúzia de idiomas despertou em mim um interesse que continua desde então.

tcrosley
fonte
8

Para entender o motivo real, você teria que perguntar às pessoas que administram essas instituições (e mesmo assim, elas podem não lhe contar).

Várias razões possíveis (e não estou defendendo nem acusando ninguém aqui, apenas supondo):

Você pode fazer as coisas em Java

Java é uma linguagem de uso geral e, como tal, pode ser usada para resolver muitos problemas.

Muitos professores entendem Java

É difícil ensinar um idioma que você não entende

Java é popular

O que significa que existem muitos recursos Java - livros, uma comunidade ativa, bibliotecas de códigos etc.

Java é fácil

Você não precisa entender muitas coisas ou teoria de baixo nível para fazer Java. Você pode não fazê-lo bem , mas pelo menos pode fazer as coisas.

Java é difundido

Você pode executá-lo em mais ou menos qualquer coisa.

Existem trabalhos para programadores Java

Existem muitos trabalhos que precisam de Java - os professores devem preparar os alunos para o mundo real.

O tempo é limitado

Em muitos cursos, não há tempo para ensinar vários idiomas, teorias, conceitos de baixo nível etc.

É o que os alunos querem

Muitos estudantes já ouviram falar (e até usaram) de Java. Eles gostam porque é familiar.

Kramii Restabelecer Monica
fonte
6

Foi isso que a indústria pediu. Havia uma escassez de desenvolvedores Java, então as escolas começaram a criá-los. As empresas têm desenvolvedores que podem começar a trabalhar assim que atravessam a porta.

De qualquer forma, o idioma não importa. Eles podiam ensinar uma linguagem que não fosse o GC e ainda produzir programadores ruins. O uso das escolas de idiomas é um detalhe de implementação. As escolas devem ensinar conceitos. Se não for esse o caso, é a escola que é o problema, não o idioma com o qual ensinam. Só porque alguém não sabe o que é um ponteiro não significa que não pode ser um programador eficaz.

GC é o caminho do futuro de qualquer maneira.

Henry
fonte
4
Você não precisa saber o que é um ponteiro. Mas você precisa entender o conceito com relativa rapidez. Não entender os ponteiros ou conceitos semelhantes aos indicadores indica falta de entendimento da ciência da computação como um todo. Não estou dizendo que todos os graduados em CS precisam ser programadores impressionantes de baixo nível, mas estou dizendo que eles devem ter pelo menos uma compreensão conceitual do que está acontecendo quando receberem um diploma universitário de quatro anos.
Billy ONeal
1
CS não é sobre programação.
Javier
1
@Javier: Como CS não é sobre programação? Certamente, existe esse ramo do CS, "Ciência da Computação Teórica", que não é sobre programação, mas, na maioria das vezes, é sobre programação.
Billy ONeal
1
@ Billy ONeal: a definição da Wikipedia é um pouco longa, mas a parte que mais se aproxima da programação é "o estudo de técnicas práticas para sua implementação". isto é, não é sobre a implementação (programação), mas estudando as técnicas de implementação (algoritmos, estruturas, idiomas, etc)
Javier
1
@Javier: Eu acho que "o estudo da programação" e "a ação da programação" são o mesmo. Afinal, o código é lido com muito mais frequência do que está escrito. Mas isso não vem ao caso - quando você recebe um diploma em CS, o que você vai acabar fazendo é programar.
Billy ONeal
4

Preguiça e motivo de lucro. Java leva a maioria das pessoas 80% do caminho, com 20% do esforço. No entanto, isso geralmente produz codificadores de vodu "macaco vê macaco fazer" que não têm um entendimento profundo do que está acontecendo e são incapazes de se aprofundar mais do que as ferramentas de alto nível.

Ensinar C / C ++ corretamente é difícil. Mesmo quando bem feito, poucos não entenderão completamente os conceitos de baixo nível, como ponteiros (existem estudos sobre isso). Além disso, não parece imediatamente relevante no mercado de trabalho.

dbkk
fonte
2
Mas se você entender os ponteiros, poderá entender as referências com muito mais facilidade.
Michael K
3

Eu concordo principalmente, mas até certo ponto.

Se você deseja ensinar o CS Cource focado em estruturas de dados ou algoritmos. Tirar a maior parte do material desnecessário do caminho é uma coisa boa. Você não quer que os alunos lidem com coisas de baixo nível ao aprender conceitos de alto nível.

Por outro lado, coisas de baixo nível também devem ser ensinadas. Só assim temos mais programadores completos.

Kugel
fonte
Não estou falando de um único curso. Para um único curso, tudo bem. Para um currículo inteiro, não é.
Billy ONeal
3

Como sempre, é uma questão do que você deseja ensinar e quanto tempo você tem para fazê-lo.

Fazer coisas em Java significa que você não precisa lidar com ponteiros perdidos e free / malloc. Isso significa muito menos erros difíceis de encontrar.

Isso não significa que você não deva aprender sobre a máquina subjacente - que deve ser boa no comércio -, mas que talvez deva escolher a ferramenta certa para o trabalho. Algoritmos de alto nível talvez não sejam o melhor tópico para o curso de montador.

user1249
fonte
Para um curso de introdução à programação ou um curso de estruturas de dados, Java é bom. No entanto, não para um currículo completo de quatro anos.
precisa
@Billy. Acordado. Estou apenas mencionando que o uso do Java compra algumas coisas com as quais você não precisa se preocupar. Você deve aprender o básico em outros cursos sem Java.
2

É pedir demais que eles aprendam algo sobre como os computadores realmente funcionam? Não faz sentido para mim que qualquer esquema de curso de CS não inclua algo de sistemas operacionais e arquitetura de computadores. Não estou dizendo que você deve criar um computador na parte de trás de um envelope, mas uma visão geral coloca todos os idiomas em perspectiva. Quero dizer, Java roda em uma máquina virtual!

Michael K
fonte
1
Existem bons programas de ciência da computação que não incluem um curso de SO e um curso de organização de computadores?
Mipadi
Eu certamente espero que não!
Michael K
0

Com toda a honestidade, não acho que você deva perder o respeito por todos os graus e, especialmente, pelo CS, porque a única linguagem ensinada é o Java.

Qualquer comp decente. O aluno de ciência da computação entende que seu diploma em CS nada mais é do que um pedaço de papel e que o conhecimento real virá de projetos e estudos pessoais. Eu gostaria de pensar que os bons alunos sabem que precisam conhecer C e aprender como fazer as coisas no Linux / Unix e aprender como NÃO ter a mão nas linguagens modernas.

user40362
fonte
-1

Não vejo problema em usar Java. O maior problema (como você mencionou) é quando as universidades ensinam programação imperativa como a melhor e única maneira de resolver todos os seus problemas. Isso é muito longe da verdade. Por exemplo, em vez de usar três linguagens imperativas (ou pior ainda a mesma linguagem) para três cursos diferentes, eles devem usar três paradigmas de programação diferentes. Um exemplo é Java (imperativo), Prolog (declarativo) e Haskell (funcional).

Quanto a isso, acho que é uma combinação de (1) política - os presidentes não têm a mente aberta ou têm benefícios / patrocinadores pessoais e (2) preguiça - os professores já foram estudantes e ensinam o que sabem ou gostam.

sakisk
fonte
-1

Calvin College em Grand Rapids Mi. Depois que eles mudaram de Java para Python para aulas de programação introdutórias, o professor, incrédulo, mencionou um grupo de nós perto do final de seu semestre: "Muitos deles podem realmente programar, é incrível". Seu espanto contrasta com as experiências anteriores com Java. Isso não faz do Java uma linguagem ruim, apenas difícil de entender do zero. Eu argumentaria a mesma coisa sobre C, C ++ ou qualquer linguagem que exija conhecimento íntimo de esquemas ou tipos de alocação de memória.

Ben DeMott
fonte
1
Bem, o Python requer conhecimento íntimo dos tipos, assim como as outras linguagens que você mencionou.
Billy ONeal
Espero que os idiomas com intérpretes sejam muito mais fáceis de aprender, pois os alunos podem obter feedback por declaração em vez de compilar por compilação.
kevin Cline
@ BillyONeal Você me interpretou mal, o contexto foi a alocação de memória na minha última frase. Ainda estou preocupado com o tamanho ou o número de elementos de um str () ou dict () ou tupla () ou lista () ou conjunto () ... eu apenas os "uso".
precisa
@kevincline Obrigado Kevin - era isso que eu estava tentando entender. A julgar pelas downvotes eu preciso trabalhar em minhas habilidades de comunicação;)
Ben DeMott
-2

Eu me formei em engenharia de sistemas de computadores, então estudei montagem, microprocessadores, VHDL, quais são as portas lógicas e como criar um flip-flop a partir delas, estudei circuitos elétricos, amplificadores operacionais, filtros passa-baixa, amplitude modulação, construiu um circuito em um laboratório que soaria como um teclado telefônico, mexeu com um analisador lógico, teve algumas aulas de física. No lado do Linux - recompilei um kernel antes, escrevi um pequeno driver de dispositivo e um sistema de arquivos para trabalhos de casa.

Mas então percebi que gosto muito mais de coisas de alto nível. Prefiro Python a C. Eu gosto de C # e amo o coletor de lixo. Gosto de matemática, algoritmos e estruturas de dados, mas não sou fã de indicadores - posso mexer com eles; Eu apenas não quero.

Então, você acha que a universidade deveria ensinar mais C, menos Java. Alguém pensa que deveria ensinar tudo no Scheme. Spolsky vai levar os dois.

Sim, é verdade que um diploma universitário é apenas um pedaço de papel, mas "não deixe que a escolaridade atrapalhe sua educação". Sempre há Wikipedia, Stack Overflow, Coursera.org, etc. Parece que as universidades tradicionais se tornarão menos importantes.

Se eu pudesse fazer graduação em todo o mundo, então eu teria estudado em uma escola diferente, não teria estudado nada sobre engenharia elétrica, mas sim matemática, matemática e física menor em física e francês. Scratch French; Eu deveria ter estudado no exterior na Suíça e aprendido 5 línguas naturais. Eu também voltaria e encontraria uma pessoa que me convenceu de que devo absolutamente fazer uma introdução às aulas de economia na faculdade para sobreviver no mundo real e dar um tapa na cabeça dele com minha coleção de livros de Milton Friedman (os únicos poucos livros sobre economia que li que não são ruins). Também não pagaria dinheiro pelo livro Freakonomics 1 ou por um livro sobre a linguagem Perl.

Em uma retrospectiva, eu teria feito muitas coisas de maneira diferente. Tudo o que posso fazer agora, e recomendo isso para você, é escolher sua própria aventura: http://www.codinghorror.com/blog/2008/03/choosing-your-own-adventure.html

Em retrospecto, eu já teria feito 100 bilhões de dólares na bolsa de valores e teria investido em pesquisas sobre o câncer; teria contratado cientistas para livrar o mundo do lixo plástico; Eu teria doado dinheiro suficiente para a campanha de Ron Paul, para que a guerra no Oriente Médio fosse mais de três anos atrás.

Reconheça agora que você nunca terá seu tempo de volta, então tente gastá-lo com sabedoria.

Trabalho
fonte
Downvoters, por favor, elabore.
-2

Alguns anos atrás, li em algum lugar que, no Reino Unido, a decisão Java foi tomada para atrair mais estudantes para a programação. Aparentemente, foi mais fácil para o cérebro por causa da falta de indicadores desagradáveis ​​e gerenciamento de memória, etc. Eu acho que essa é a razão pela qual o Python está sendo rapidamente adotado como a nova 'ferramenta de aprendizado'. Eu seria da opinião de que seu curso típico da universidade não fará de você um programador. Tudo o que se pretende fazer é armá-lo com uma certa quantidade de conhecimento e prepará-lo para a programação. O dia em que alguém pode se chamar um programador geralmente passa um bom tempo depois da universidade e, quando esse momento chegar, indicadores, coleta de lixo e paradigmas de programação que não sejam OOP, não devem ser um problema.

Fing
fonte
-2

Por que o Java é usado?

Três razões:

  1. Java usa sintaxe no estilo C. Muitos programadores estão familiarizados com isso, o que reduz a curva de aprendizado.

  2. O dinheiro foi gasto para comercializar o Java como moderno e legal. Mas comparado ao lisp, o java está vivendo na idade da pedra.

  3. A JVM. JVM é a única coisa legal sobre o java que é legítima, não apenas o hype do marketing. Embora a JVM deva ser elogiada como uma plataforma para a execução de programas, ela não merece por si só a existência da linguagem Java. Você pode compilar teoricamente e praticamente muitos idiomas diferentes para a JVM.

LispIsTheGodLanguage
fonte
1
Bem vinda. Parece que essa pode ser sua primeira publicação nos Stack Exchange Programmers. Por favor, dê uma olhada na página de perguntas frequentes perguntas programmers.stackexchange.com/faq para obter alguns conselhos sobre reputação, fazer e responder perguntas. Um ponto importante é que as respostas devem ser informativas, não provocativas. Se você fizer uma afirmação como Java é idade da pedra e Lisp é moderno, explique o porquê. Muitos leitores podem saber que o Lisp foi especificado em 1958 e é apenas um pouco mais novo que o FORTRAN. Se você quiser dizer que algo sobre Java que é compartilhado com FORTRAN ou Algol impulsiona seu design e o limita, descreva-o.
DeveloperDon
-3

Sua pergunta está apoiando as descobertas de outra pessoa que escreveu um artigo dizendo que Java é tão legal, mas não pesado o suficiente para a computação científica. Eu acho que ele deveria usar o Big Decimal com todas as suas precisão, NANs, etc. e seguir em frente.

Eu quero viver apenas em um mundo automático de coleta de lixo. Sua estética, mais limpa, organizada e saudável, evita o desperdício de dinheiro em despesas de saúde, é mais desejável - não precisa marcar algo como indesejável - simplesmente desmarcando-o ou definindo-o como nulo ou quando saio do escopo, o item fica automaticamente marcado para coleta de lixo ..

Ok, agora estou falando apenas sobre Java, mas seria muito útil se isso também funcionar no cenário de lixo real. O Java é uma vez executado em qualquer lugar, o que é bom o suficiente para ser usado como linguagem nas escolas. Nenhum vazamento de memória e ser apreciado por programadores felizes que não querem gastar tempo etiquetando todos os objetos que usam e parando de usar são uma boa lógica em nome do Java.

Java tem ponteiros - bem, nós os chamamos de referências .. String s1 = "Hello"; String s2 = "Olá"; String s3 = new String ("Olá");

s1 e s2 apontam para o mesmo objeto String - que é por referência s1 == s2, s1.equals (s3), mas s1 == s3 é falso porque s3 é um novo objeto de referência - essa é a aritmética java de referências e eu entendo tudo isso tão desculpe, não desejo ser rotulado como alguém que não entende as complexidades subjacentes da aritmética de ponteiros de C ou C ++.

Uma
fonte
2
Referências não são ponteiros. Você não pode usá-los aritmeticamente e não pode usá-los para reinterpretar um pedaço de memória para o qual eles apontam. E, é claro, não importa o quanto você queira morar em um mundo com coleta de lixo, o fato é que o mundo não é um mundo com coleta de lixo. Não estou dizendo que Java é uma linguagem ruim ou que as pessoas não devem usar java. Se você gosta, use, há ótimas coisas. Apenas acho inadequado como uma linguagem para iniciantes, porque oculta coisas essenciais para os novos programadores entenderem.
Billy ONeal